SQL / Sybase: SELECT ... GROUP BY ... НЕ ИМЕЕТ? - PullRequest
11 голосов
/ 25 мая 2011
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, но это не работает.

есть идеи?спасибо!

Ответы [ 2 ]

10 голосов
/ 25 мая 2011
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')
7 голосов
/ 25 апреля 2014

Вы также можете использовать этот трюк:

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
...