如何在SQL中使用WHERE语句来排除组

时间:2012-03-06 12:05:39

标签: sql

我有一个复杂的查询,但这是我正在尝试做的事情的本质

在一个看起来像这样的表格中:

Col1 Col2  
Bill 0  
Bill 0  
Bill 0  
Bill 1  
Bill 1  
John 1  
John 1  
Jonh 1  

上表有2列。我试图查询第2列中所有行中“1”的行。由于“Bill”行的行数为“0”和“1”,因此必须排除bill。 WHERE语句中的子查询提供了多个结果,但不起作用。

SELECT t1.Col1
FROM Table1 t1
WHERE t1.Col1 <> (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')

在查询中使用循环语句会给我的项目带来全新的麻烦,所以我希望任何聪明的人都可以帮助我完成任务。

4 个答案:

答案 0 :(得分:3)

有很多方法。每个都有其优点,取决于您的RDBMS和您最容易阅读的内容。有关性能的更多详细信息,请参阅here并查看执行计划或进行一些测试以获得最适合您需求的解决方案。

SELECT  *
FROM    Table t1
WHERE   t1.Col1 NOT IN (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')

SELECT  t1.*
FROM    Table t1
        LEFT JOIN
        (   SELECT  Col1
            FROM    Table
            WHERE   Col2 <> '0'
        ) Exc
            ON exc.Col1 = t1.Col1
WHERE   Exc.Col1 IS NULL

SELECT  *
FROM    Table t1
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    Table t2
            WHERE   t2.Col2 <> '0'
            AND     t1.Col1 = t2.Col1
        )

答案 1 :(得分:3)

SELECT t1.Col1 
FROM Table1 t1 
WHERE NOT EXISTS
(SELECT t2.Col1 
FROM Table1 t2
WHERE t2.col2 = 0
AND t2.col1 = t1.col1)

答案 2 :(得分:1)

SELECT Col1
  FROM YourTable
 WHERE Col2 = 1
EXCEPT
SELECT Col1
  FROM YourTable
 WHERE Col2 <> 1;

答案 3 :(得分:0)

尝试:

SELECT Col1 
FROM Table1
GROUP BY Col1
HAVING COUNT(DISTINCT Col2)=1 and MAX(Col2)='1'