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'))
我试了好几个小时,也看了很多帖子,但还是不知道如何处理这个请求:
我有一个 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'))