mysql where count(column_name)= 1?

时间:2010-09-28 01:05:35

标签: mysql sql aggregate-functions sql-delete mysql-error-1111

以下是我正在使用的查询:

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子句

中为更新指定目标表'tkl'

4 个答案:

答案 0 :(得分:10)

在计算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 ;-) btw,查询语法对我来说似乎不错,但是你没有忘记指定template_keyword_linkkeywords加入条件条款? mysql会给你带来任何错误吗?

答案 1 :(得分: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;

答案 2 :(得分: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 )

答案 3 :(得分:-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