删除SQL查询结果集

时间:2014-08-21 21:29:06

标签: mysql sql-delete

我正在尝试删除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 )

2 个答案:

答案 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

似乎是一个愚蠢的工作