以下是我正在使用的查询:
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'
答案 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_link
和keywords
加入条件条款? 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