2009-12-07 75 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);