在访问查询中更改外键值

时间:2018-07-20 17:56:44

标签: ms-access ms-access-2010 ms-access-2013 ms-access-2016

这是我要完成的工作的一个小例子。

表1:人

  • ID
  • 名字
  • HairColor_ID

表2:HairColor

  • ID
  • 颜色

我有查询1,在其中给我一个颜色参数(c),它返回该发色的ID

SELECT HairColor.ID
FROM HairColor
WHERE (([HairColor].[Color]=[c]));

现在在查询2中,我具有人员表和查询1。在该字段中,我想选择人员的ID 2,并根据查询1的结果(应返回ID)更改其HairColor_ID(查询2)。如下:

UPDATE Person INNER JOIN Query1 ON Person.ID = Query1.ID SET 
Person.HairColor_ID = [Query1]![ID]
WHERE (((Person.ID)=2));

我假设[Query1]![ID]返回ID。

基本上,我要做的就是通过将Color Value作为参数来更新HairColor_ID。我该怎么办?

2 个答案:

答案 0 :(得分:1)

您正在尝试通过Person.ID = Query1.ID将Person表与Query1联接,但是Query1.ID不是人的ID,而是发色...

此查询应将第2个人的HairColor更改为您作为参数c输入的颜色:

UPDATE Person, Query1 SET Person.HairColor_ID = [Query1].[ID]
WHERE (((Person.ID)=2));

答案 1 :(得分:1)

基本上,您想要的是在CROSS JOINPerson之间更新HairColor。您不需要Query1,至少对我来说,没有它的机制更加清晰。

PARAMETERS c Text ( 255 );
UPDATE Person, HairColor
SET Person.HairColor_ID = [HairColor].[ID]
WHERE Person.id=2 AND HairColor.Color=[c];