下面是我使用的查询:
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/2-1
3/4
4-1
5/9
我想添加一些类似AND COUNT(k_id) = 1的东西,所以我最终
2/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);但是现在我得到了
您不能指定目标表'tkl‘以便在
子句中进行更新
发布于 2010-09-28 01:07:25
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 **
顺便说一下,查询语法上的对我来说似乎不错,但是没有忘记指定template_keyword_link和keywords连接条件子句吗?mysql给出了什么错误吗?
发布于 2010-09-28 01:08:33
您正在查找分组后发生的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;发布于 2010-09-28 01:10:43
嵌套子查询是一个简单的解决方案。
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 = 1https://stackoverflow.com/questions/3808970
复制相似问题