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

时间:2009-12-07 20:08:40

标签: sql ms-access

在Access 2003中,我正在尝试获取一个表,如果给定ID的任何行的任何Indicator = 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

由于杰夫和马克都至少有一行指标= 1我想让他们所有的行= 1。

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

UPDATE Table1 INNER JOIN (SELECT DISTINCT Table1.ID
FROM Table1
WHERE (((Table1.Indicator)=1)))
List ON Table1.ID =List.ID SET Table1.Indicator = 1;

快速有效地执行此操作的好方法而不制作临时表?或者临时表是最好/最有效的解决方案?这将使我的数据库变得非常混乱,因为有8行我必须这样做...我正在操作的表是~300 MB。

由于

3 个答案:

答案 0 :(得分:3)

这是一种方法:

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

答案 1 :(得分: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

答案 2 :(得分:1)

你有没有试过这样的东西

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