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

Mysql 仅在没有行匹配的情况下选择,mysql,sql,select,Mysql,Sql,Select,我需要一个能够在名称“未分类”时伪装的查询 乙二醇 我需要一个查询来获取Jane Doe,因为所有类别中没有选项=1。 不幸的是,由于所有的名字都有一个0至少1个类别,我最终会提取每个人 SELECT DISTINCT Fullname FROM tablename WHERE fullname NOT IN ( SELECT a.FullName FROM tablename a WHER

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

乙二醇

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

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
而不是
notin
。为了获得更好的性能,请在列
全名
上定义一个
索引

另一种方法是使用
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
而不是
notin
。为了获得更好的性能,请在列
全名
上定义一个
索引

类似的内容,可能吗?(可能不是最有效的,但应该有效)


也许是这样的?(可能不是最有效的,但应该有效)


这里有另一种方法

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

这里有另一种方法

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