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

2つの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

于 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 に答える