根据 SQL 中具有相同 ID 的其他记录筛选出一条记录

Filter out a record depending upon other records of the same ID in SQL

我的 table 架构如下:

Table Name: Quality

ID     Name      Type
--     ----      ----
1      XYZ       S1
1      XYZ       B1
1      XYZ       S2
1      XYZ       R1
2      ABC       B1
2      ABC       B2
2      ABC       R1 
2      ABC       U1
3      PQR       B1
3      PQR       B2
3      PQR       R2
3      PQR       R1
4      AAA       B1
4      AAA       S1
5      BBB       B1
5      BBB       B2
5      BBB       U2

我想过滤掉那些Type是B1但不应该是(其他行的R1和U1)的ID。还有那些类型是B2但不应该是(其他行中的R2和S2)的ID

这里,输出应该是

ID     Name      Type
--     ----      ----
2      ABC       B2
4      AAA       B1
5      BBB       B1

我的查询如下,没有给出正确的结果:

SELECT 
      ID , NAME , TYPE      

FROM
       QUALITY Q

WHERE
       (Q.TYPE IN ('B1') AND (Q.TYPE Not IN ('R1', 'U1'))
       OR
       (Q.TYPE IN ('B2') AND (Q.TYPE Not IN ('R2', 'U2'))

我的查询一次运行一条记录,所以我没有得到正确的结果。我怎样才能使这个查询检查该特定 ID 的每条记录以找到 TYPE?

任何帮助都会非常有用。

select * from 
quality q 
where 
(q.type = 'b1' and q.id not in (select q2.id from quality q2 where q2.type in ('r1','u1'))
or
(q.type = 'b2' and q.id not in (select q3.id from quality q3 where q3.type in ('r2','u2'))

您可以使用 NOT EXISTS:

SELECT *
FROM Quality q
WHERE
    (Type = 'B1' AND NOT EXISTS(SELECT 1 FROM Quality WHERE ID = q.ID AND Type IN ('R1', 'U1')))
    OR (Type = 'B2' AND NOT EXISTS(SELECT 1 FROM Quality WHERE ID = q.ID AND Type IN ('R2', 'U2')))