在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。
由于
答案 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);