在表中选择具有特定值但没有相同ID的其他值的人

时间:2020-09-03 15:06:56

标签: sql db2

我尝试了几个小时,读了许多帖子,但仍然不知道如何处理此请求:

我有一张这样的桌子:

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

我想选择一个ID为TRTYPE的 PERSON ID ,但对于同一ID他的TRYPE却不为I。

输出应类似于:

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

因为TOM是唯一在未执行I的TRTYPE的ID上执行过U型的人

4 个答案:

答案 0 :(得分:2)

使用聚合和/etc/passwd

having

答案 1 :(得分:1)

您可以像下面的查询中那样使用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
)

答案 2 :(得分:0)

假设您的表名为[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

答案 3 :(得分:0)

您可以使用“通用表表达式”破坏逻辑并按以下方式获得结果

console.log(e)
相关问题