2010-09-28 90 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) 
相关问题