MySQL使用IN()和元组

时间:2012-04-17 09:09:45

标签: mysql

我很确定这是不可能的,但只是想仔细检查。

显然IN()的正常使用是

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

但是如果我需要在我的IN()中更具体,例如

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

我知道这是一种面向对象的风格做事方式,我非常怀疑MySQL可以做到这一点,但只是冒险。

3 个答案:

答案 0 :(得分:2)

可以在IN中使用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

答案 1 :(得分: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")

好吧,这不是最好的风格,也许不是很快,但是快速而肮脏的解决方案:D

答案 2 :(得分:0)

您的更新虽然不需要这样的复杂性,因为您的子查询位于同一个表中。

你必须切换到:

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

你可能想要评估为颜色添加索引和制作字段的影响,但如果它的更新很少使用它可能不值得。