Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL:如何在WHERE in子句中删除_Mysql_Select_Sql Delete - Fatal编程技术网

mySQL:如何在WHERE in子句中删除

mySQL:如何在WHERE in子句中删除,mysql,select,sql-delete,Mysql,Select,Sql Delete,我有这个疑问 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

我有这个疑问

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,但没有成功

我的解决方案是什么? 谢谢你试过这个吗

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
)

如果在同一个查询中尝试从同一个表中进行选择和删除,MySQL通常会不高兴,即使选择在子查询中也是如此

但您可以在删除查询中执行更多连接

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

那么,为什么在子选择中选择了多个值呢?这是为了演示我到目前为止所做的工作。我不知道如何返回1值家长和孩子哇!就这样!谢谢这个解决方案也有效,再次感谢