2012-04-17 51 views
1

我很確定這是不可能的,但只是想仔細檢查。MySQL使用IN()與元組

顯然,正常使用()將是

UPDATE cars 
SET colour = "Sunburst Red" 
WHERE id IN(SELECT id FROM cars WHERE colour LIKE "%Red%") 

但是,如果我需要在我的()更具體的,比如什麼

UPDATE cars 
SET colour = "Sunburst Red" 
WHERE id, make IN(SELECT id, make FROM cars WHERE colour LIKE "%Red%" AND make like "Honda") 

我知道這是很很多面向對象的風格的做事方式,我非常懷疑MySQL可以做到這一點,但只是失去了機會。

+0

你能帶一個更好的例子嗎?你的第一個查詢通常應該寫成:UPDATE cars SET color =「Sunburst Red」WHERE color LIKE「%Red%」' – linepogl 2012-04-17 09:18:09

回答

2

在在具有touple是可能的,你只需要加括號

WHERE (id, make) IN(SELECT id, make FROM cars WHERE colour LIKE "%Red%" AND make like "Honda")

update子選擇使用同一個表但是是危險的,往往不允許的。你的查詢可以改寫爲

UPDATE cars 
SET colour = "Sunburst Red" WHERE `colour` LIKE "%Red%" AND `make` = "Honda" 

注:it's possible that the query is not optimized in this way

+0

太棒了!謝啦。 – jdborg 2012-04-17 09:21:13

0

爲什麼不使用兩個IN塊?

UPDATE cars 
SET colour = "Sunburst Red" 
WHERE id IN(SELECT id FROM cars WHERE colour LIKE "%Red%" AND make like "Honda") 
AND 
make IN(SELECT make FROM cars WHERE colour LIKE "%Red%" AND make like "Honda") 

OK,這是不是最好的風格,也許不是非常快,但一個快速和骯髒的解決方案:d

+0

如果你絕對想使用這兩個IN,我想不出另一種方法來實現這一點在。但他可以,只需發出一條正常的UPDATE語句,就像@linepogl在問題的評論中顯示的那樣。我只會做這樣的事情:''更新汽車SET顏色=「陽光紅色」在哪裏顏色喜歡「%紅色%」並使得像「本田」'' – 2012-04-17 09:30:18

0

您的更新,雖然不需要如此複雜的你子查詢是在同一個表。

你必須切換到類似:

UPDATE cars 
SET colour = "Sunburst Red" 
WHERE colour LIKE "%Red%" AND make like "Honda" 

你可能要評估添加索引對色彩的影響,使字段,但如果它的更新很少使用它可能不值得。

+0

對不起,這是一個不好的例子。我正在使用不同的表格。 – jdborg 2012-04-17 09:21:50