Sql 通过在关系表中查找主表中的文本来更新关系ID列

Sql 通过在关系表中查找主表中的文本来更新关系ID列,sql,select,sql-update,sql-like,Sql,Select,Sql Update,Sql Like,我将软件PAD文件数据库从导入到Microsoft Access的一个名为main的表中: MAIN ----- ID ProgramName Program_category_Class CategoryID <- I created this to create a one to many relation with a new table Category . . 我从::delimiter左侧的field Program_Category_类中将所有值提取到表类别中。来自Prog

我将软件PAD文件数据库从导入到Microsoft Access的一个名为main的表中:

MAIN
-----
ID
ProgramName
Program_category_Class
CategoryID <- I created this to create a one to many relation with a new table Category
.
.
我从::delimiter左侧的field Program_Category_类中将所有值提取到表类别中。来自Program_Category_类的数据如下所示:

Program_Category_Class
Business::Accounting & Finance
Games & Entertainment::Action
Business::Accounting & Finance
Business::Databases & Tools
我要做的是创建一个SQL查询,该查询使用类别表中的类别ID更新主表,该类别表类似于Program_Category_类上的左匹配。然后,我将修改查询以获得子类别表的左右匹配

我尝试过这样的方法,但没有结果:

UPDATE Main SET Main.category = (SELECT Category.ID
FROM Category
WHERE Category.CategoryName LIKE Main.Program_Category_Class+'%')
WHERE (((Exists (SELECT Category.ID
FROM Category
WHERE Category.CategoryName LIKE Main.Program_Category_Class+'%'))<>False));
由于它是一个公共数据库,我可以向任何感兴趣的人提供数据库的副本

任何帮助都将不胜感激。多谢各位

您可能希望删除False以及一些额外的括号。这不是你真正的问题,但它有助于提高可读性。不,现在发生的事情是,你的like谓词实际上是向后的——你试图将较长的问题与较短的答案进行比较。将where子句切换到where Main.Program_Category_类,如Category.CategoryName+“%”,然后查看是否有帮助。 此外,当新字段看起来命名为Main.CategoryID时,您正在尝试更新Main.category


为了将来的参考,请考虑这些常见的有帮助的后续提供:那么,你的意思是你没有得到什么结果?如果字段名存在问题,查询是否会抱怨它无效,或者它没有更新任何行

谢谢-我将其移动到MySQL并使其能够使用:更新Main SET Main.subcategory=从CategorySub中选择CategorySub.ID,其中Main.Program_Category_类如CONCAT“%”,CategorySub.SubCategoryName LIMIT 1从CategorySub中选择CategorySub.ID,其中Main.Program_Category_类如CONCAT“%”,CategorySub.SubCategoryName限制1
UPDATE Main SET Main.category = (SELECT Category.ID
FROM Category
WHERE Category.CategoryName LIKE Main.Program_Category_Class+'%')
WHERE (((Exists (SELECT Category.ID
FROM Category
WHERE Category.CategoryName LIKE Main.Program_Category_Class+'%'))<>False));