2016-09-16 123 views
3

我有這個疑問MySQL的:如何在WHERE 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 

基本上,它返回父母和孩子的價值觀,像這樣刪除:

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和DELETE - 即使SELECT位於子查詢中,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