mysql where count(column_name)= 1?

Hai*_*ood 5 mysql sql aggregate-functions mysql-error-1111 sql-delete

这是我正在使用的查询:

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;
Run Code Online (Sandbox Code Playgroud)

此查询返回类似
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);
Run Code Online (Sandbox Code Playgroud)

我明白了

您的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);
Run Code Online (Sandbox Code Playgroud)

但是现在我得到了

您不能在FROM子句中为更新指定目标表'tkl'

zer*_*kms 10

WHERECOUNT(*)在计算之前应用子句,因此您需要in 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
Run Code Online (Sandbox Code Playgroud)

另见:http://dev.mysql.com/doc/refman/5.1/en/select.html

**UPD**:

TIAS ;-)顺便说一下,查询语法对我来说似乎很好,但是你不忘记指定template_keyword_linkkeywords加入条件子句吗?mysql会给你带来任何错误吗?