首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL:如何删除WHERE子句

mySQL:如何删除WHERE子句
EN

Stack Overflow用户
提问于 2016-09-16 21:49:10
回答 2查看 4.9K关注 0票数 3

我有这样的疑问

代码语言:javascript
复制
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

基本上,它返回父值和子值,如下所示:

代码语言:javascript
复制
parent      child
--------------------
76          64
76          106

我希望使用这些值,即父值和所有子表(76、64、106),从另一个表中删除如下

代码语言:javascript
复制
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)

执行上述查询,工作完美!但是,我需要查询是动态的。我尝试过,但没有成功:

代码语言:javascript
复制
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,但没有成功!

我的解决方案是什么?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 22:08:19

如果您尝试在同一个查询中从同一个表中选择和删除--即使SELECT在子查询中-- MySQL通常是不高兴的。

但是您可以在DELETE查询中执行更多的联接。

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2016-09-16 21:54:45

你试过这个吗?

代码语言:javascript
复制
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
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39540558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档