mySQL:如何在WHERE IN子句中进行删除
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,但没有成功!
我的解决方案是什么?
谢谢
admin 更改状态以发布 2023年5月23日
你试过这个吗?
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 )