Select table 中的人具有特定值但没有相同 ID 的另一个值

Select person in a table having a specific value but not having another value for same id

我试了好几个小时,也看了很多帖子,但还是不知道如何处理这个请求:

我有一个 table 这样的:

+------+------+------+
|PERSON|TRTYPE| ID   |
+------+------+------+
|JERRY | I    |   2  |
+------+------+------+
|JERRY | U    |   2  |
+------+------+------+
|TOM   | U    |   2  |
+------+------+------+
|SPIKE | I    |   3  |
+------+------+------+
|SPIKE | U    |   3  |
+------+------+------+

我想 select ID 的 TRTYPE 为 U 但他没有相同 ID 的 TRYPE .

输出应该是这样的:

+------+------+
|PERSON| ID   |
+------+------+
|TOM   | U    |
+------+------+

因为 TOM 是唯一对他没有执行 I 的 TRTYPE 的 ID 执行 U 转换的人

使用聚合和having:

select person, id
from mytable
where trtype in ('I', 'U')
group by person, id
having min(trtype) = max(trtype) and min(trtype) = 'U'

您可以在下面的查询中使用 NOT EXISTS

SELECT * FROM yourtable A WHERE A.TRTYPE ='U'
AND NOT EXISTS
(
SELECT 1 FROM yourtable T WHERE T.TRTYPE ='I'
AND T.PERSON=A.PERSON AND T.ID=A.ID
)

假设您的 table 被称为 [table_1],

SELECT [PERSON], [ID] FROM [table_1] t1
WHERE (SELECT COUNT(*) FROM [table_1] t2 WHERE t2.[PERSON] = t1.[PERSON] AND t2.[TRTYPE] = ‘I’) = 0

您可以使用 Common Table 表达式来打破您的逻辑并实现如下结果

with cte as(select * from table where trptype in ('U')) 
select * from cte where cte.id not in (select distinct cte.id from cte where cte.trptype in ('I'))