2012-08-25 38 views
0

MySQL的更新字段我想更新表中的一些成果,將符合幾個條件(從其它表即變量來匹配SELECT語句)選擇從

我發現與此類似,在網:

START TRANSACTION; 
SELECT * FROM score_test,score_2,score_3, etc WHERE score=20000 AND score_test.id=score_2.id AND etc.. FOR UPDATE; 
UPDATE score_test SET name='Test'; 
COMMIT; 

注意:UPDATE score_test SET ......我需要收集滿足SELECT語句

結果,但它沒有工作WHERE不能滿足我的需求。它更新我的所有領域。我正在尋找的是一種語法,用於僅更新SELECT語句中的結果。

我的數據庫被拆分成10-15個表格,條件可能會有所不同,因爲我必須更新一些字段,嚴格地完成一些依賴於來自其他表格的查詢的條件。

回答

3

SQL UPDATE語句接受WHERE條款就像SELECT報表做:

UPDATE score_test SET name='Test' WHERE score=20000; 

編輯

你也可以把下列UPDATE爲大致相同,隨後FROM一個SELECT部分的一部分,這意味着你可以連接:

UPDATE score_test 
    JOIN test ON test.id=score_test.test_id 
SET score_test.name = 'Test' 
WHERE score_test.score=20000 

對此的提示在the UPDATE documentation中,它在語法定義中使用table_reference符號。 table_reference的語法定義爲on the JOIN page。在SELECTUPDATE查詢中暗示相同的處理。在FOR UPDATE

FOR UPDATE條款

注在SELECT聲明不實際上做好相關更新什麼...只收集對行的鎖。你仍然需要通過適當的UPDATE查詢來做到這一點,該查詢完成所有必要的JOIN和WHERE(可能與你的SELECT相同)

+0

我知道。但是,當我有更新score_test時會發生什麼SET name ='Test'WHERE score = 20000,table2.userstats ='100',table3.whatever ='cool',table3.yey ='nothing',table ....; ?考慮到SELECT * FROM table1,table2,table3 WHERE條件... AND userid.table1 = userid.table2,userid.table1 = userid.table2 ... –

+0

請參閱編輯的答案,您可以在UPDATE語句內「選擇」多個表以進行更新,並簡單地爲設置值指定限定的列名稱。 –

+0

我必須使用多個表。 –

0

有多種方法可以完成你所要求的。最簡單的就是滿足你的問題只是做一個更新。

UPDATE score_test SET name='Test' WHERE score=20000;

如果你想從多個表中滿足上述的條件,則可以使用連接,就像一個SELECT語句,更新語句。

如果您有這樣複雜的用例,可以通過創建一個臨時表來保存要編輯的項目的ID,然後通過多個DELETE查詢逐個甄別該表,直到您有你想要更新的設置。