我很确定这是不可能的,但只是想仔细检查。
显然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可以做到这一点,但只是冒险。
答案 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"
你可能想要评估为颜色添加索引和制作字段的影响,但如果它的更新很少使用它可能不值得。