2016-04-01 292 views
0

我有下面的SQL查詢的問題:嵌套SQL查詢

SELECT job 
FROM (SELECT job, COUNT(*) AS cnt 
FROM Employee 
GROUP BY job) 
WHERE cnt=1 

至於結果它應該只顯示了CNT(崗位數)等於1
當我上面的測試選擇查詢所有作業小提琴,我得到以下錯誤:

Incorrect syntax near the keyword 'WHERE'. 

SQLFiddle:http://sqlfiddle.com/#!6/d812a/7

+0

http://sqlfiddle.com/#!6/d812a/15 – Strawberry

+0

Baker和Gardener的預期結果是什麼? – Loufylouf

+0

您也可以使用HAVING,這將使外部查詢冗餘 – Strawberry

回答

1

無需使用子查詢的複雜性增加時,它不要求

SELECT job, count(job) 
FROM Employee 
GROUP BY job 
having count(job)=1; 
+0

謝謝 - 看起來很簡單。 :) – CallMeBronxy

0

您忘記添加別名。 請更改查詢這樣

SELECT job 
FROM (SELECT job, COUNT(*) AS cnt 
FROM Employee 
GROUP BY job) As MyTable 
WHERE cnt=1 

你應該爲內部查詢給別名當您使用select和where子句之外。

+0

不知道。感謝您提到它 - 但我想我會使用HAVING-Clausel。 – CallMeBronxy

+0

這是一個很好的,它是不同於你問。我更正了你的查詢。如果它有效,如果它是直接回答你的問題,然後upvote和接受。檢查已問過的問題,而不是替代解決方案的權利? –

+0

你說得對,當我有足夠的聲望點的時候,我會贊成。 – CallMeBronxy

0

您應該使用它是那種事做了HAVING條款。您的要求將會更加簡單:

SELECT job FROM Employee GROUP BY job 
HAVING COUNT(id)=1 

的文檔指出

SQL標準要求具有必須引用僅列 GROUP BY子句或聚合函數中使用的列。但是, MySQL支持此行爲的擴展,並允許HAVING到 將SELECT列表中的列和外部子查詢中的列作爲 。

要注意的重要的事情是違背WHERE條款,你可以使用集合funcitons(如計數,最大值,最小值......)的HAVING子句。

1

您需要提供別名到嵌套查詢

SELECT A.job 
FROM (SELECT job, COUNT(*) AS cnt 
FROM Employee 
GROUP BY job)A 
WHERE A.cnt=1 
0

您應該使用HAVING語法:

SELECT job, COUNT(*) AS cnt 
FROM Employee 
GROUP BY job 
HAVING cnt = 1; 
+0

不起作用,它會返回一個錯誤。聚合函數應該直接用在'HAVING'子句中。 – Loufylouf

+0

這取決於你的SQL模式。如果你禁用了'ONLY_FULL_GROUP_BY',它應該可以工作。 –