根据 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')))
我的 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')))