2009-12-07 71 views
0

在Access 2003中,我试图把一个表,如果任何一个指标= 1为给定ID的任何线路,使该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行中的所有台词= 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

您需要提供更多的细节,以了解如何确定哪些ID要更新,哪些不是。 SQL需要声明性逻辑才能做出决定。 – 2009-12-07 20:23:35

回答

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

最简单的办法:

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 
+0

如果我把我的select语句放在WHERE中,就像你有JOIN一样,它的效果很好,谢谢 – Dan 2009-12-07 20:28:23

1

你有没有trie d这样的东西

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