我需要返回包含雇员名称(在一个字段中)的行,这些雇员名称仅被归为“经理” (而不是“工人”或“经理和工人”)。
经理和工人值在第二个字段中。
所以它可能看起来像这样:
+----------+------------+
| 'Miller' | 'Manager' |
| 'Jones' | 'Manager' |
| 'Jones' | 'Worker' |
+----------+------------+
在这种情况下,我只希望它返回'Miller'
。
我可以得到一个或两个,但不能得到仅将雇员归为经理的人。
有什么想法吗?
答案 0 :(得分:2)
一种方法使用聚合:
select name
from t
group by name
having min(classification) = max(classification) and min(classification) = 'manager';
答案 1 :(得分:0)
带有子查询的方法在表中不仅有“经理”和“工人”的情况下应能很好地工作:
SELECT t1.name FROM t t1
WHERE
t1.classification='Manager'
AND NOT EXISTS (
SELECT 1 FROM t t2 WHERE t1.name=t2.name AND t2.classification='Worker'
)
答案 2 :(得分:0)
计算标题数。如果他们的头衔是“经理”并且只有一个头衔,请选择个人:
SELECT *
FROM PEOPLE p
INNER JOIN (SELECT NAME, COUNT(TITLE) AS TITLE_COUNT
FROM PEOPLE
GROUP BY NAME) c
ON c.NAME = p.NAME
WHERE p.TITLE = 'Manager' AND
c.TITLE_COUNT = 1;