我有以下2个表,我试图更新子类别表中的CategoryID外键字段。一个类别可以有多个子类别,因此这里的关系是一对多。
我试图在查询设计视图中执行此操作。我尝试用于更新的条件如下:
类别名称以数字开头,例如106包装材料。此类别的子类别将以相同的三位数字开头,例如106纸板,106气泡包装等。
由于我有很长的子类别列表,我试图使用更新查询,将类别ID(Categories.ID)输入到子类别表(subcategories.CategoryID)中的categoryID列,其中前3个数字是相同。
因此,在上面的示例中,如果106类包装材料在类别表中的ID为1,那么106个纸板和106个bubblewrap在其categoryID字段中将具有“1”。
我知道我可以使用Left(categoryname,3)来提取要比较的数字,但是不知道如何构造更新语句来完成此任务或在何处放置它。
所以我最终的期望结果是所有子类别都有相应的CategoryID条目。更多类别和相关子类别示例是:
101文具(ID 2) - > 101个笔记本,101笔,101个书写垫
102工艺品(ID 3) - > 102种颜料,102种刷子
我非常感谢一些帮助,对SQL和访问来说还是一个新手。
感谢
更新:
我尝试了以下sql
UPDATE subCategories INNER JOIN categories ON subCategories.categoryID = categories.ID SET subCategories.CategoryID = [Categories].[ID]
WHERE ((Left([Categories].[Category],3)=Left([Subcategories].[Subcategory],3)));
以下是设计视图中的相同查询:
但这是它返回的结果:
答案 0 :(得分:0)
你可以试试这个:
UPDATE categories,subCategories SET subCategories.CategoryID = [categories]。[ID] WHERE((左([类别]。[类别],3)=左([子类别]。[子类别],3)));
为了使其正常工作,您需要确保Category中的三个数字是唯一的。如果有多个相同编号的出现,则此更新将无法正常工作。