我需要一个能够在名称“未分类”时删除的查询
例如
+---------+------+------+
|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个类别,我最终会提取所有人。
答案 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);