2014-11-24 48 views
2

鉴于以下数据谁:查询:员工不具有相同的名称

EMPID NAME SALARY DID 
1  kevin 32000 2 
2  joan 42000 1 
3  brian 37000 3 
4  larry 82000 5 
5  harry 92000 4 
6  peter 45000 2 
7  peter 68000 3 
8  smith 39000 4 
9  chen 71000 1 
10  kim  46000 5 
11  smith 46000 1 

名单谁不共享同一名称的员工的名字。

我不确定是否必须自己加入表格(或者做其他事情)。

这是我写到目前为止:

SELECT distinct e.name 
FROM employee e, employee ee 
WHERE e.name <> ee.name 
+2

你在找什么输出?为什么'SELECT distinct e.name FROM employee e'不够? – njzk2 2014-11-24 20:55:11

+1

我无法理解你的问题。你想拉取不重复的名字吗?就像表中只有一次的名字一样?或作为@ njzk2国家,你只是想要一个明确的名单... – 2014-11-24 20:55:28

回答

5

无需加盟:

SELECT name 
FROM employee 
GROUP BY name 
HAVING COUNT(name) = 1 

算多少每个名字的有,那么只返回那些只有一个名字。例如彼得的计数是2,不会显示,而金姆计数为1,并且会显示出来。

+0

这正是我所期待的,感谢清理混乱 – Bobby 2014-11-24 20:59:33

+0

道具上的答案。我有其他的东西可以工作,但代码更多。我总是忘记了。 – 2014-11-24 21:20:30

0

如果你想获得只是不同的名称下面的查询应该足够:

SELECT distinct e.name 
FROM employee e 

希望它可以帮助!

0
mysql> select * from employee; 
+-------+-------+--------+-----+ 
| empid | name | salary | did | 
+-------+-------+--------+-----+ 
|  1 | kevin | 32000 | 2 | 
|  2 | joan | 42000 | 1 | 
|  3 | brian | 37000 | 3 | 
|  4 | larry | 82000 | 5 | 
|  5 | harry | 92000 | 4 | 
|  6 | peter | 45000 | 2 | 
|  7 | peter | 68000 | 3 | 
|  8 | smith | 39000 | 4 | 
|  9 | chen | 71000 | 1 | 
| 10 | kim | 46000 | 5 | 
| 11 | smith | 46000 | 1 | 
+-------+-------+--------+-----+ 
11 rows in set (0.00 sec) 


mysql> select distinct name from employee; 
+-------+ 
| name | 
+-------+ 
| kevin | 
| joan | 
| brian | 
| larry | 
| harry | 
| peter | 
| smith | 
| chen | 
| kim | 
+-------+ 
9 rows in set (0.00 sec) 
0

使用一个内部联接来计算每个emp的记录数。你可以过滤结果,其中count = 1

SELECT 
    T.EMPID, 
    T.NAME, 
    T.SALARY, 
    T.DID 
FROM 
    employee AS T 
    INNER JOIN (SELECT COUNT(*) AS CNT , NAME FROM employee GROUP BY NAME) AS A ON T.NAME = A.NAME 
WHERE 
    CNT = 1 
+0

MarkB是获取列表的最佳代码,或者使用我的将转储表中的每个员工的数据。 – 2014-11-24 21:05:33