Sql “更新查询”;“可更新查询”;问题

Sql “更新查询”;“可更新查询”;问题,sql,ms-access,Sql,Ms Access,在Access 2003中,我尝试获取一个表,如果给定ID的任何一行的任何指示符=1,那么将该ID的所有行设为=1 例如,如果我们有: ID Indicator Jack 0 Jack 0 Jeff 1 Jeff 0 Mark 1 Mark 1 将成为: ID Indicator Jack 0 Jack 0 Jeff 1 Jeff 1 Mark 1 Mark 1 因为Jeff和Mark都至少有一行Indicator=1,所以我想让他们所有的行都=1 到目前为止,这是我的尝试,但我

在Access 2003中,我尝试获取一个表,如果给定ID的任何一行的任何指示符=1,那么将该ID的所有行设为=1

例如,如果我们有:

ID   Indicator
Jack 0 
Jack 0
Jeff 1
Jeff 0
Mark 1
Mark 1
将成为:

ID   Indicator
Jack 0 
Jack 0
Jeff 1
Jeff 1
Mark 1
Mark 1
因为Jeff和Mark都至少有一行Indicator=1,所以我想让他们所有的行都=1

到目前为止,这是我的尝试,但我一直得到一个错误“操作必须使用可更新的查询”(我认为,因为select语句不是一个表……您无法更新查询)

在不制作临时表的情况下,快速高效地执行此操作的好方法是什么?或者临时表是最佳/最有效的解决方案?这将混乱我的数据库相当多,因为有8行我必须这样做。。。我正在操作的表约为300MB

感谢最简单的解决方案:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark') --etc
如果只想更新值尚未为1的行:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark')
   AND indicator != 1
最简单的解决方案:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark') --etc
如果只想更新值尚未为1的行:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark')
   AND indicator != 1

这是一种方法:

UPDATE T1 SET Indicator = 1 
WHERE Indicator = 0
AND EXISTS (SELECT * FROM T1 AS T2 WHERE T2.Indicator = 1 AND T1.ID = T2.ID)

这是一种方法:

UPDATE T1 SET Indicator = 1 
WHERE Indicator = 0
AND EXISTS (SELECT * FROM T1 AS T2 WHERE T2.Indicator = 1 AND T1.ID = T2.ID)

你试过这样的东西吗

UPDATE [Table] SET [Table].[Indicator] = 1, [Table].ID = [ID]
WHERE Exists (SELECT * FROM [Table] t WHERE ID = t.ID and [Table].Indicator = 1);

你试过这样的东西吗

UPDATE [Table] SET [Table].[Indicator] = 1, [Table].ID = [ID]
WHERE Exists (SELECT * FROM [Table] t WHERE ID = t.ID and [Table].Indicator = 1);

您需要提供更多关于如何确定哪些
ID
s要更新,哪些不更新的详细信息。SQL需要声明性逻辑才能做出决定。您需要提供更多关于如何决定哪些
ID
s要更新,哪些不更新的详细信息。SQL需要声明性逻辑才能做出这样的决定。如果我将select distinct语句放在WHERE(如您所用)中,而将其作为联接(如我所用),则效果非常好,谢谢如果我将select distinct语句放在WHERE(如您所用)中,而将其作为联接(如我所用),则效果非常好,谢谢