Ms access 更改Access查询中的外键值

Ms access 更改Access查询中的外键值,ms-access,ms-access-2010,ms-access-2013,ms-access-2016,Ms Access,Ms Access 2010,Ms Access 2013,Ms Access 2016,下面是我想完成的一个小例子 表1:人 身份证 名字 理发师 表2:头发颜色 身份证 颜色 在查询1中,我给它一个颜色参数(c),它返回该头发颜色的ID SELECT HairColor.ID FROM HairColor WHERE (([HairColor].[Color]=[c])); 现在在查询2中,我有Person表和查询1。在该字段中,我想选择person的ID 2,并根据查询1的结果(该结果应返回一个ID)更改其头发颜色ID,查询2如下: UPDATE Person INN

下面是我想完成的一个小例子

表1:人

  • 身份证
  • 名字
  • 理发师
表2:头发颜色

  • 身份证
  • 颜色
在查询1中,我给它一个颜色参数(c),它返回该头发颜色的ID

SELECT HairColor.ID
FROM HairColor
WHERE (([HairColor].[Color]=[c]));
现在在查询2中,我有Person表和查询1。在该字段中,我想选择person的ID 2,并根据查询1的结果(该结果应返回一个ID)更改其头发颜色ID,查询2如下:

UPDATE Person INNER JOIN Query1 ON Person.ID = Query1.ID SET 
Person.HairColor_ID = [Query1]![ID]
WHERE (((Person.ID)=2));
我想是吧![ID]返回ID


基本上,我只想通过将颜色值作为参数来更新HairColor_ID。我该怎么做?

您正试图通过Person.ID=Query1.ID将Person表与Query1连接起来,但是Query1.ID不是一个人的ID,而是一个发型的ID

此查询应将person 2的头发颜色更改为作为参数c输入的颜色:

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

基本上,您需要更新
Person
HairColor
之间的
交叉连接。您不需要
查询1
,对我来说,没有它,至少机制更清晰

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

这基本上就是我要求的。谢谢你的回复。HansUp提供了一个答案,这是我最初试图做的,但找不到如何做,这导致我创建了第二个查询。再次感谢你!这就是我实际上想要做的,但是如果没有另一个查询,我就无法理解。谢谢。使用您的SQL和我的SQL,GUI显示的内容完全相同,只是我的GUI显示了2之间的关系,所以当我删除它时,它修复了它。我只是觉得这很奇怪。是的,你必须怀疑那些设计-视图关系。它可能允许您在任意数字字段上联接表。。。说出
Person\u ID
Engine\u Displacement
。。。但这并不意味着它是一个有用或有意义的连接。你的问题相当于Person.ID=HairColor.ID上的
,尽管
Query1
多少掩盖了这一事实。