2012-06-24 107 views
1

我有兩個表:的MySQL更新查詢

  • 表1:組名,ITEM_NAME,狀態
  • 表2:組名,地理

我想更新table1。缺省狀態爲0.我想使用單個UPDATE語句將table1的狀態更新爲1。

我想檢查table1中的每一行,如果group_name存在於table2中。如果是這樣,我會將狀態更新爲1.

我試過這個,但無法得到正確的結果。

UPDATE table1 
SET table1.`STATUS`=1 
WHERE table2.group_name=table1.group_name 

我該如何達到我想要的效果?

+0

您所著UPDATE表1中,其中只有一個條件,而不是一個命令 –

+0

的SET是他的命令的實際格式是: –

+0

感謝您的評論,我需要了解更多.. –

回答

3

您可以像其他人一樣使用多表更新。但你也可以用一個子查詢單個表的更新語句做一個稍微簡單的辦法:

UPDATE table1 
SET STATUS = 1 
WHERE group_name IN (SELECT group_name FROM table2) 

還要注意的是,你甚至都不需要的前提下,在所有行status最初設置爲零。您可以更新所有行的正確值的單一UPDATE聲明:

UPDATE table1 
SET STATUS = group_name IN (SELECT group_name FROM table2) 
+0

@MattWestlake:我理解您的擔憂,但我仍然認爲這是一個有效且有用的答案,並與其他答案結合增加了額外的價值。對不起,你覺得我的答案應該是低估的,但我認爲對於一個問題可以有多個有用的答案,並且這個網站的質量是一個問題收到許多不同的答案,顯示各種不同的解決方案到同樣的問題。 –

1

的SET是他的命令的實際格式爲: 更新「表名」 組「列名」 = 「NEWVALUE」 [ 「nextcolumn」= 「newvalue2」 ...] 其中 「COLUMNNAME」 OPERATOR 「值」 [和|或 「列」 OPERATOR 「值」];

沒有一個SQL數據庫運行起來,但我相信UPDATE命令類似於FROM指令,所以,我認爲你必須做

UPDATE table1, table2 SET table1.'status' = 1 
WHERE table2.group_name=table1.group_name 
+0

運行這個命令會給出:'你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在''status'= 1附近使用正確的語法' WHERE table2.group_name = table1.group_name'at line 1' –

+0

這裏的問題是狀態引號。應該是'而不是' – Ander2

3

您可以使用多個更新表的語法,所以你的查詢是:

UPDATE table1,table2 
SET table1.`STATUS`=1 
WHERE table2.group_name=table1.group_name 
+0

+1這工作正常。 –