2011-12-15 8 views
0

Possible Duplicate:
SQL Delete: can't specify target table for update in FROM clauseMySQLはサブクエリ

を削除私はいくつかの行を削除しようとしているが、成功には、現在ではありませんよ。あなたは、私が前にこのエラーメッセージを見たことがない、また私は私が「何についてのいくつかの有用な情報を見つけることができましたFROM

に更新のターゲット表「product_pictures」を指定することはできません

DELETE FROM product_pictures 
WHERE picture = (SELECT picture FROM product_pictures WHERE id = ?) 

私は間違っている。行の

例:

ID Picture 
19 picture-grey.jpg 
20 picture-grey.jpg 
21 picture-grey.jpg 
+0

あなただけで行を削除したい場合は、確認することができますまたはあなたがより複雑な要件を持っているかどうか。 –

+0

@kris:または 'id =? 'の行を持つ同じ' picture'を持つすべての行を削除したい場合 –

+0

@ypercube - あり – Kristian

答えて

3
DELETE a 
FROM product_pictures AS a 
    JOIN product_pictures AS b 
    ON b.picture = a.picture 
WHERE b.id = ? 

やMySQLアナライザをだますます:

DELETE a 
FROM product_pictures AS a 
    JOIN 
    (SELECT DISTINCT picture 
     FROM product_pictures 
     WHERE id = ? 
    ) AS b 
    ON b.picture = a.picture 
+0

Magical!ありがとう – Kristian

1

あなたのクエリがそれにループを持っています。なぜあなただ​​け

DELETE FROM product_pictures 
WHERE id = ? 
9
DELETE FROM product_pictures 
WHERE picture = (SELECT picture FROM (SELECT picture FROM product_pictures WHERE id = ?) x) 

をしないこのチートは

+0

それでも私には別の種類のエラーが出る:全ての派生テーブルはそれ自身のエイリアスを持っている必要があります:) – Kristian

+0

@kris:ネストされたクエリのエイリアスを追加しました( 'x'エイリアスで更新されたクエリ) – zerkms