SQL / Sybase:选择…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
如果我想选择在至少1行中有至少1行的所有col1值,我可以这样做:
SELECT col1 
FROM mytable 
WHERE col1 IN (\'A\',\'B\',\'C\') 
GROUP BY col1 
HAVING col2 = \'bear\'
这将返回A和B 但我只想从col1中没有
col2 = \'bear\'
的行中选择值 我在想
NOT HAVING
,但这似乎行不通。 有任何想法吗?谢谢!     

解决方法

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\')
    ,您还可以使用以下技巧:
SELECT col1 
FROM mytable
WHERE col1 IN (\'A\',\'C\') 
GROUP BY col1 
HAVING SUM(CASE col2 WHEN \'bear\' THEN 1 ELSE 0 END)=0
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...