Microsoft Access 2010更新查询 - 更新外键字段

时间:2015-01-30 10:45:45

标签: sql ms-access sql-update foreign-keys ms-access-2010

我有以下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和访问来说还是一个新手。

感谢

Tables and their relationship

更新:

我尝试了以下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)));

以下是设计视图中的相同查询:

query design

但这是它返回的结果:

Query result

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

UPDATE categories,subCategories SET subCategories.CategoryID = [categories]。[ID] WHERE((左([类别]。[类别],3)=左([子类别]。[子类别],3)));

为了使其正常工作,您需要确保Category中的三个数字是唯一的。如果有多个相同编号的出现,则此更新将无法正常工作。