我有这样的疑问
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,但没有成功!
我的解决方案是什么?谢谢
发布于 2016-09-16 22:08:19
如果您尝试在同一个查询中从同一个表中选择和删除--即使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发布于 2016-09-16 21:54:45
你试过这个吗?
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
)https://stackoverflow.com/questions/39540558
复制相似问题