我正在尝试删除SQL结果集,但它不起作用:
DELETE FROM votes
WHERE id IN (
SELECT *
FROM votes v
LEFT JOIN comments c ON f.id = v.post_id
GROUP BY v.id
HAVING COUNT(c.comment) = 0 )
答案 0 :(得分:2)
确实如此,你不能使用你想要在直接子选择中删除行的同一个表,但是有一个小技巧 - 子选择作为派生表的子选择 - 你可以做到这一点:
DELETE FROM votes
WHERE id IN (
SELECT
t.id
FROM (
SELECT v.id, COUNT(c.comment) cnt
FROM votes v
LEFT JOIN comments c ON f.id = v.post_id
GROUP BY v.id
HAVING COUNT(c.comment) = 0
) t
);
我假设应该删除没有评论的行。
答案 1 :(得分:1)
你很接近...... 2次改变
in()语句中的子查询只能返回一个字段。更改选择*以选择v.id
计数= 0在逻辑意义上并不完全有效。如果count = 0那么无论如何都不会删除。我怀疑你使用的左连接语法,你打算有0条评论的投票?正确的想法与左连接,但你想要c.comment为null(左连接产生空值...其中c.comment为null意味着没有找到评论)。
当然,由于mysql:
,这不起作用DELETE FROM votes
WHERE id IN (
SELECT v.id
FROM votes v
LEFT JOIN comments c ON f.id = v.post_id
where c.comments is null)
如果我被困在MySQL中......(抱歉这是伪代码,我没有在mysql中使用足够长的时间来在文本窗口中得到这个。
select id
into #temp
FROM votes v
LEFT JOIN comments c ON f.id = v.post_id
where c.comments is null
delete from votes where id in (select id from #temp)
drop table #temp
似乎是一个愚蠢的工作