如果有两个不同的值,SQL查询将排除行

时间:2014-02-26 12:03:21

标签: sql group-by

基本上我的select语句返回如下:

ID     Status

100      1
100      2
101      1

我正在寻找的是,如果状态为1的ID,并且如果相同的ID具有另一个状态ID为2则返回

简短结果如下:

ID     Status

101      1

提前致谢!

4 个答案:

答案 0 :(得分:2)

以下查询返回仅出现一次的ID值。

SELECT ID
FROM t
GROUP BY ID
HAVING COUNT(*) = 1

您提供的样本数据应该足够了。如果还有其他情况,请告诉我。

SQL Fiddle

答案 1 :(得分:1)

你需要子查询和NOT IN 如果您将列status作为INT数据类型

,则以下内容将起作用
SELECT * 
  FROM table 
 WHERE status = 1 
       AND ID NOT IN (
              SELECT ID 
                FROM table 
               WHERE status = 2
       );

答案 2 :(得分:0)

进行通用查询,该查询将删除所有重复行,而不仅仅是特定ID:

  select ID 
     from table where ID NOT IN
      (select ID from table GROUP BY ID HAVING count(Status) > 1) 
     /* Subquery will fetch ID's having multiple entries*/

SQL Fiddle

答案 3 :(得分:0)

CTE'ID'检索在DB中具有单个记录的所有ID。然后将其连接到原始表以将结果作为一对返回(ID,Status)

;with IDs as
(
select ID
from yourtable
group by ID
having count(*) = 1
)
select i.ID, y.Status
from yourtable y
inner join IDs i on y.ID = i.ID
order by i.ID