簡體   English   中英

mysql where count(column_name)= 1?

[英]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這樣的東西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子句中為更新指定目標表'tkl'

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會給你帶來任何錯誤嗎?

您正在尋找分組發生的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;

試試這個

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 )

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM