2012-04-17 7 views
1

これは可能ではないと確信していますが、二重チェックしたいだけです。タプルでIN()を使用しているMySQL

明らかIN()の通常の使用は

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

私は、これは非常にある知っている

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

しかし、私は例えば、私のIN()で、より具体的にする必要がある場合だろうObject Orientatedスタイルのやり方で、MySQLがやることができるとは思っていますが、ちょうどその機会を逃してしまいます。

+0

もっと良い例がありますか?あなたの最初のクエリは、通常、 'UPDATE cars SET color =" Sunburst Red "WHERE color LIKE"%Red% "' – linepogl

答えて

2

は、INで持つtoupleが可能である、あなただけのかっこ

を追加する必要があります updateの副選択で同じテーブルを使用して

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

しかし、危険と頻繁に許可されていません。あなたのクエリが

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

Awesome!ありがとう。 – jdborg

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は

+0

として書かれていなければなりません。これを達成する別の方法は、に。しかし、@linepoglのように通常のUPDATE文を発行するだけで問題にコメントすることができます。私はちょうどこのような何かをするでしょう: '' UPDATE cars SET color = "Sunburst Red" WHERE color LIKE "%Red%" AND LIKE "Honda" '' –

0

あなたのアップデートは、しかし、そのような複雑さを必要としません。あなたのようなものに切り替える必要があるだろう

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

あなたは色にインデックスを追加することの影響を評価し、フィールドを作りたいかもしれませんが、その更新はめったにそれにそのおそらく価値がないを使用していない場合。

+0

申し訳ありませんが、それは悪い例でした。私は別のテーブルを使用しています。 – jdborg

関連する問題