1

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

显然 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 可以做到这一点,但只是机会渺茫。

4

3 回答 3

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"

注意:查询可能没有以这种方式优化

于 2012-04-17T09:19:05.460 回答
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

于 2012-04-17T09:18:49.103 回答
0

您的更新虽然不需要那么复杂,因为您的子查询在同一张表上。

你必须切换到类似的东西:

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

您可能想要评估向颜色添加索引并创建字段的影响,但如果它的更新很少使用它可能不值得。

于 2012-04-17T09:19:05.740 回答