2014-11-21 142 views
0

所以這個查詢的目的是顯示罪犯的ID,姓氏和名字(所有這些都可以在「罪犯」表中找到),然後只顯示有超過一個句子的罪犯 - 我通過使用HAVING子句來做到這一點,該句子顯示罪犯必須具有多於一個sentence_id(句子表主鍵)的情況。當我在下面的代碼類型然而,我收到一個錯誤,說:「這是用於列命名加入(或自然連接或使用USING子句的JOIN)不能有一個明確的限定。GROUP BY,HAVING和JOINS的問題

SELECT c.criminal_id, c.last, c.first 
FROM criminals c JOIN sentences s USING (criminal_id) 
GROUP BY s.criminal_id 
HAVING COUNT(s.sentence_id) > 1; 

我嘗試刪除限定符(我知道它是列名前面的c和s),但後來發現一個錯誤,表示查詢不是GROUP BY表達式。在這裏試圖弄清楚這件事情,如果你能幫忙,我會很感激。謝謝。

回答

0

沒關係!如果有人看到這個,我找到了真正的錯誤,我刪除了限定符。當您在使用GROUP時選擇多個列P BY子句中,您必須GROUP BY ALL非聚合函數。所以我的正確的代碼是這樣的:

SELECT criminal_id, last, first 
FROM criminals JOIN sentences USING (criminal_id) 
GROUP BY criminal_id, last, first 
HAVING COUNT(sentence_id) > 1; 

希望這可以幫助任何人偶然發現這個問題。

+2

雖然我會建議把別名放在'c.last,c.first'上。更好的是,避免使用USING語法並明確指出:'ON c.criminal_id = s.criminal_id'。 – 2014-11-21 03:09:05