SQL/Sybase: SELECT... GROUP BY... НЕ ИМЕЕТ?
col1 col2
A bear
A dog
A cat
B bear
B dog
B cat
C dog
C cat
D bear
D dog
D cat
E bear
E dog
E cat
F dog
F cat
если я хотел выбрать все значения col1, имеющие хотя бы одну строку, где col2 = 'bear'
, я могу сделать:
SELECT col1
FROM mytable
WHERE col1 IN ('A','B','C')
GROUP BY col1
HAVING col2 = 'bear'
который вернет A и B
но я хочу выбрать только значения из col1, где нет строки, где col2 = 'bear'
Я думаю NOT HAVING
, но это не работает.
любые идеи? спасибо!
Ответы
Ответ 1
SELECT m1.col1
FROM mytable m1
WHERE NOT EXISTS(SELECT NULL
FROM mytable m2
WHERE m2.col1 = m1.col1
AND m2.col2 = 'bear')
AND m1.col1 IN ('A', 'B', 'C')
Ответ 2
Вы также можете использовать этот трюк:
SELECT col1
FROM mytable
WHERE col1 IN ('A','B','C')
GROUP BY col1
HAVING SUM(CASE col2 WHEN 'bear' THEN 1 ELSE 0 END)=0