仅在没有行匹配的情况下选择

时间:2013-01-28 06:48:31

标签: mysql sql select

我需要一个能够在名称“未分类”时删除的查询

例如

+---------+------+------+
|Full Name|Cat_ID|Option|
+---------+------+------+
|John Doe |1     |1     |
|John Doe |2     |0     |
|John Doe |3     |0     |
|Jane Doe |1     |0     |
|Jane Doe |2     |0     |
|Jane Doe |3     |0     |
+---------+------+------+

我需要一个可以获得Jane Doe的查询,因为没有选项=所有类别中的1个 幸运的是,由于所有名称都有0个至少1个类别,我最终会提取所有人。

3 个答案:

答案 0 :(得分:3)

SELECT DISTINCT Fullname
FROM    tablename
WHERE   fullname NOT IN
        (
            SELECT  a.FullName
            FROM    tablename a
            WHERE   a.option = 1
        )

另一种方法是使用LEFT JOIN

SELECT  DISTINCT aa.Fullname
FROM    tablename aa
        LEFT JOIN
        (
            SELECT  a.FullName
            FROM    tablename a
            WHERE   a.option = 1
        ) bb ON aa.Fullname = bb.Fullname
WHERE   bb.Fullname IS NULL

我宁愿使用JOIN而不是NOT IN。为了获得更好的效果,请在列INDEX上定义FullName

答案 1 :(得分:2)

这是另一种方法。

SELECT `fullName`
FROM `your_table`
GROUP BY `fullName`
HAVING SUM(`option`)=0

答案 2 :(得分:1)

这样的事可能吗? (可能效率不高,但应该有效)

SELECT full_name FROM table WHERE full_name NOT IN (SELECT full_name FROM table WHERE option=1);