如何删除MySql中只有一种类的行?

时间:2014-09-15 00:30:31

标签: mysql sql

我在MySQL表中有以下数据名为info:

chapter | section
     3  | 0 
     3  | 1
     3  | 2
     3  | 3
     4  | 0
     5  | 0

我想为chapter = n删除一行,但仅当相同章节没有部分> 0时才会删除。因此,第4章和第5章不能删除第3章。我知道以下内容不起作用:

DELETE info WHERE chapter = 3 AND NOT EXISTS (SELECT * FROM info WHERE chapter = 3 AND section>0);

同一个表在语句中使用了两次。那么实现目标的最简单方法是什么?

3 个答案:

答案 0 :(得分:3)

你的想法是正确的。这是语法:

DELETE
FROM mytable
WHERE chapter NOT IN (
    SELECT * FROM (
        select tt.chapter
        from mytable tt
        where tt.section <> 0
        group by tt.chapter
    ) tmp
)

嵌套选择是解决MySQL中的一个错误。

Demo.

答案 1 :(得分:1)

您可以运行子查询以返回包含多个部分的行,然后删除从子查询返回的行。


DELETE FROM table1 WHERE table1.chapter Not IN (select chapter from (SELECT table1.chapter FROM table1 WHERE Table1.section >=1 ) Results);


Example Fiddle based on your question

如果您只想删除特定的章节,也可以在子查询where子句中提供章节。如果它不符合where子句,则不会删除任何记录。

答案 2 :(得分:0)

这应该这样做。

DELETE FROM Table t WHERE NOT EXISTS( SELECT 1 FROM Table t2 Where t2.chapter = t.chapter And t2.section > 0 ) 根据我的经验,Exists通常比In表现更好。如果要存储大量记录,则应考虑到这一点。