2010-09-28 98 views
4

這裏是我使用的查詢:mysql where count(column_name)= 1?

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5) 
GROUP BY k_id; 

該查詢返回類似
1 | 6
2 | 1
3 | 4
4 | 1
5 | 9

我想補充一些東西,如AND COUNT(k_id) = 1 所以我最終與
2 | 1
4 | 1

但是我無效使用一個組功能。

我該怎麼做呢?


更新:

另一部分我的問題是。

這可以用作刪除語句嗎?

DELETE FROM 
template_keyword_link tkl 
LEFT JOIN keywords k 
ON tkl.k_id = k.k_id 
WHERE tkl.k_id 
IN(SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2) 
GROUP BY k_id 
HAVING k_count = 1); 

我得到

你有一個錯誤的SQL語法;


因此,基於反饋我已經改變了這種使用

DELETE tkl, k FROM 
template_keyword_link tkl 
LEFT JOIN keywords k 
ON tkl.k_id = k.k_id 
WHERE tkl.k_id 
IN(SELECT k_id 
FROM template_keyword_link 
WHERE k_id IN(1,2) 
GROUP BY k_id 
HAVING COUNT(k_id) = 1); 

但是現在我越來越

您不能指定更新目標表「漳州燦坤」 FROM子句

+0

您可以加入,讓你的錯誤的確切查詢? – JoshD 2010-09-28 01:06:54

+0

你想要的是顯示ID,其數量爲1 – 2010-09-28 01:12:00

回答

9

WHERE子句應用於COUNT(*)之前,因此您需要在HAVING之後應用。

SELECT k_id, 
     COUNT(k_id) AS k_count 
    FROM template_keyword_link 
    WHERE k_id IN (1, 2, 3, 4, 5) 
GROUP BY k_id 
    HAVING k_count = 1 

參見:http://dev.mysql.com/doc/refman/5.1/en/select.html

** ** UPD:

TIAS ;-)順便說一句,語法似乎對我很好,但沒有忘記指定查詢template_keyword_linkkeywords連接條件子句? MySQL會給你什麼錯誤嗎?

+0

這將成爲我接受的答案:) – Hailwood 2010-09-28 01:09:40

+0

編輯查詢以包含它們;) 但正如你所看到的,我仍然收到錯誤。 – Hailwood 2010-09-28 01:22:56

+0

,因爲'IN'預計只有一列,而您正在給出2.將'count(*)'移到'having'。 – zerkms 2010-09-28 01:27:30

3

你正在尋找這之後分組情況having條款(where子句分組前):

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5) 
GROUP BY k_id 
HAVING COUNT(k_id) = 1; 
-1

嵌套子查詢是一個簡單的解決方案。

SELECT * FROM 
    (
    SELECT k_id, COUNT(k_id) AS k_count 
    FROM template_keyword_link 
    WHERE k_id IN(1,2,3,4,5) 
    GROUP BY k_id 
) inner 
WHERE inner.k_count = 1 
+0

HAVING更簡單,更明確。 – Porculus 2010-09-28 01:25:55

0

試試這個

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5) 
GROUP BY k_id 
HAVING (COUNT(k_id) = 1) 
相關問題