0

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

例如

+---------+------+------+
|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 个类别,我最终会提取每个人。

4

3 回答 3

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

我更喜欢使用JOINover NOT IN。为了获得更好的性能,请定义一个INDEXon 列FullName

于 2013-01-28T06:50:41.750 回答
2

这是另一种方法。

SELECT `fullName`
FROM `your_table`
GROUP BY `fullName`
HAVING SUM(`option`)=0
于 2013-01-28T07:19:46.583 回答
1

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

SELECT full_name FROM table WHERE full_name NOT IN (SELECT full_name FROM table WHERE option=1);
于 2013-01-28T06:51:13.290 回答