2016-09-16 9 views
3

では、私は基本的に、それは、親と子の値を、このクエリMySQLの:どのようにLIKE句

SELECT a.album_id parent, a2.album_id child 
FROM album a 
LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
WHERE a.album_id = 76 

を返してきたWHEREに削除するには、次の

parent  child 
-------------------- 
76   64 
76   106 

が、私はそれらの値を使用したいです、親と子(76,64,106)のように他のテーブルから削除する

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (76,64,106) 

上記のクエリを実行すると、完璧に動作します!しかし、私はクエリを動的にする必要があります。 ノー成功でこれを試してみました:

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (
    SELECT a.album_id parent, a2.album_id child 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 

それは動作しませんなぜ私はそれを得る、where句のサブクエリは、2つの値を返すため。そして、私は成功なしでCONCAT_GROUPとCONCAT_WSを試しました!

私のソリューションは何ですか? ありがとう

+1

なぜ、副選択で複数の値が選択されているのですか? –

+0

これまでに何をしたかを実証することです。私は1つの値(親と子供)を返す方法はありません – Marco

答えて

3

SELECTがサブクエリー内にあっても、同じクエリ内の同じテーブルからSELECTとDELETEを実行しようとすると、MySQLは一般的に不幸です。

ただし、DELETEクエリでさらに結合を行うことができます。

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
LEFT JOIN album p ON a.parent_album_id = p.album_id 
WHERE a.album_id = 76 OR p.album_id = 76 
+0

うわー!ちょうどそれのように!ありがとう – Marco

1

これを試しましたか?

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (
    SELECT a.album_id parent 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 
or a.album_id IN (
    SELECT a2.album_id child 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 
+0

このソリューションはまた、働く、ありがとう – Marco