2012-01-25 85 views
0

如何使用SELECT的結果來確定在隨後的UPDATE中更改的字段。 (在複合語句中有效地鏈接SELECT和後面的UPDATE)。使用多表語法進行更新

這是我嘗試在SQL做:

SELECT id_of_record_in_table_B 
FROM table_A 
WHERE table_A.id_of_record_in_table_B = 36; 

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id = id_of_record_in_table_B --from the SELECT above) 

區分大小寫的比賽是不是真正的問題相關,但我已經包括了它,因爲它實際上是什麼,我需要做的。我試圖解決的問題是如何將從SELECT返回的值「傳遞」到UPDATE中。

+0

不是第一個查詢總是隻返回'36'(1,2,3,...,1000或甚至0行,但全部用'36')? –

回答

1

你它可以在相同的查詢,如

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_b.id = (SELECT id_of_record_in_table_B 
        FROM table_A 
        WHERE table_A.id_of_record_in_table_B = 36) 
+0

+1謝謝。我特別喜歡這個使用select的結果並進行相等比較的答案。我會檢查一下看看它是如何工作的,然後回報。 – therobyouknow

+0

不客氣。希望它能解決你的問題。 – Kypros

+1

這工作,如果我改變=至IN'UPDATE表-B SET string_field = '大寫' WHERE BINARY table_B.string_field LIKE '%小寫的' 和table_b.id IN(SELECT id_of_record_in_table_B FROM表-A WHERE table_A.id_of_record_in_table_B = 36) '使用=給出結果不受影響。 IN具有預期的效果。信用你,並接受因爲你足夠接近。感謝:http://www.roseindia.net/sql/mysql-example/mysql-nested-select.shtml和http://www.daniweb.com/web-development/databases/mysql/threads/10744 '在'。 – therobyouknow

1

這可以被稱爲update with multi table語法從而避免子查詢。此語法的唯一問題是您無法使用order by和limit子句

UPDATE table_B as tb,table_A as ta 
SET tb.string_field = 'UPPERCASE' 

WHERE BINARY tb.string_field LIKE '%lowercase' 
AND tb.id = id_of_record_in_table_B 
AND tA.id_of_record_in_table_B = 36 
+0

+1謝謝!瞭解替代品很有趣。 – therobyouknow

+0

我會檢查一下看看它是如何工作的,然後回報。 – therobyouknow

+0

我的解決方案解決了你的問題嗎? –

0

您可以使用嵌套select語句。

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id IN (SELECT id_of_record_in_table_B 
        FROM table_A 
        WHERE table_A.id_of_record_in_table_B = 36); 
+0

奇怪的是@Angelin Nadar的回答。 – therobyouknow

+0

與@ kypro不一樣,因爲我的多表語法 –