4

Вот запрос я использую:mysql где 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

Однако я не могу использовать функцию группы.

Как бы я это сделал?


Update:

Другая часть на мой вопрос.

Можно ли использовать это как заявление об удалении?

что-то вроде

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' для обновления в пункте ОТ

+0

Не могли бы вы добавить точный запрос, который дает вам ошибку? – JoshD

+0

что вам нужно показать id, чей счет 1 –

ответ

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_link и keywords условие условия соединения? Вызывает ли mysql какие-либо ошибки?

+0

Это станет принятым ответом, как только я смогу :) – Hailwood

+0

Отредактировал запрос, чтобы включить их;) Но, как вы можете видеть, я все еще получаю сообщение об ошибке. – Hailwood

+0

, потому что 'IN' ожидает получить только один столбец, пока вы даете 2. Переместите' count (*) 'в' having'. – zerkms

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

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) 
Смежные вопросы