SQL- 使用过滤器加入相同 Table
SQL- Join Same Table with Filters
我有一个包含 2 列的 table(跟踪器); (ID 和状态)。我想检索一个没有批准状态的 ID 列表,但是状态可以从待定状态变为批准状态,并且不会删除原始数据。请参阅下面的示例和期望的结果。
追踪器Table:
ID
Status
123
Pending
123
Approved
456
Pending
678
Denied
894
Approved
期望的结果:
ID
Status
456
Pending
678
Denied
123
不存在,因为第二个状态是 'Approved',894 不存在,因为 'Approved'
中唯一的状态
按照如下思路思考:
Select ID
FROM Tracker b
WHERE Status = 'Approved'
Right Join
Select ID
FROM Tracker a
USING ID
您可以使用聚合:
select t.id
from tracker t
group by t.id
having sum(case when t.status = 'Approved' then 1 else 0 end) = 0;
SELECT T.ID,T.STATUS
FROM YOUR_TABLE AS T
WHERE NOT EXISTS
(
SELECT 1 FROM YOUR_TABLE AS T2 WHERE T.ID=T2.ID AND T2.STATUS='APPROVED'
)
试试这个 SQL。
SELECT t.id
,t.status
FROM tracker t
GROUP BY id
HAVING sum(
CASE t.status
WHEN 'Approved' THEN 1
ELSE 0
END
) = 0
;
我有一个包含 2 列的 table(跟踪器); (ID 和状态)。我想检索一个没有批准状态的 ID 列表,但是状态可以从待定状态变为批准状态,并且不会删除原始数据。请参阅下面的示例和期望的结果。
追踪器Table:
ID | Status |
---|---|
123 | Pending |
123 | Approved |
456 | Pending |
678 | Denied |
894 | Approved |
期望的结果:
ID | Status |
---|---|
456 | Pending |
678 | Denied |
123
不存在,因为第二个状态是 'Approved',894 不存在,因为 'Approved'
按照如下思路思考:
Select ID
FROM Tracker b
WHERE Status = 'Approved'
Right Join
Select ID
FROM Tracker a
USING ID
您可以使用聚合:
select t.id
from tracker t
group by t.id
having sum(case when t.status = 'Approved' then 1 else 0 end) = 0;
SELECT T.ID,T.STATUS
FROM YOUR_TABLE AS T
WHERE NOT EXISTS
(
SELECT 1 FROM YOUR_TABLE AS T2 WHERE T.ID=T2.ID AND T2.STATUS='APPROVED'
)
试试这个 SQL。
SELECT t.id
,t.status
FROM tracker t
GROUP BY id
HAVING sum(
CASE t.status
WHEN 'Approved' THEN 1
ELSE 0
END
) = 0
;