mySQL:如何在WHERE IN子句中进行删除

38 浏览
0 Comments

mySQL:如何在WHERE IN子句中进行删除

这个问题已经在这里有答案了:

MySQL Error 1093 - 无法在FROM子句中指定更新的目标表

我有这个查询

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日
0
0 Comments

你试过这个吗?

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
0 Comments

如果您尝试在同一查询中从同一表中进行选择和删除,即使选择在子查询中,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