2016-09-16 6 views
3

у меня есть этот запрос,MYSQL: Как удалить в ГДЕ В статье

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 
) 

Я понимаю, почему он не будет работать, потому что подзапрос в предложении где возвращает 2 значения. И поэтому я попробовал CONCAT_GROUP и CONCAT_WS без успеха!

Каково мое решение? Thanks

+1

Итак, почему у вас есть несколько значений, выбранных в подзаголовке? –

+0

это продемонстрировать, что я сделал до сих пор. Я не знаю, как вернуть 1 значение (родительский и детский) – Marco

ответ

3

MySQL, как правило, несчастны, если вы пытаетесь выбрать и удалить из одной таблицы в одном запросе - даже если SELECT, в подчиненном запросе.

Но вы можете сделать больше объединений в своем запросе 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

Wow! Просто так! благодаря – 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