SELECT条目来自多行的条件

时间:2015-08-18 14:30:33

标签: sql opensql

我有一个看起来像这样的表:

KID       GRP
1         ABS
1         AOR
1         AOR
2         ABS
2         ABS
2         ABS
2         AOR
2         ZVN
3         ABS

我需要找到所有KID,它们都有像ABS和AOR这样的GRP。所以预期的结果是1和2。

哪个SELECT语句可以搜索此条目?

提前致谢...

4 个答案:

答案 0 :(得分:2)

您可以尝试:

SELECT KID       
FROM mytable
WHERE GRP IN ('ABS', 'AOR')
GROUP BY KID  
HAVING COUNT(DISTINCT GRP) = 2

WHERE子句筛选出任何非('ABS', 'AOR')行。 HAVING子句保证只选择与 KID相关联的('ABS', 'AOR')个值。

答案 1 :(得分:1)

使用相关子查询的一个选项:

<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">

Demo

这是使用SELECT DISTINCT KID FROM TableName t WHERE EXISTS(SELECT 1 FROM TableName t2 WHERE t2.GRP='ABS' AND t.KID=t2.KID) AND EXISTS(SELECT 1 FROM TableName t2 WHERE t2.GRP='AOR' AND t.KID=t2.KID) 的另一种方式,如果列表增长则更好:

GROUP BY

Demo

答案 2 :(得分:0)

select kid from tablename where grp = 'ABS'
intersect
select kid from tablename where grp = 'AOR'

如果您的数据库允许,您可以使用intersect

答案 3 :(得分:0)

您可以使用Where和Exists的组合

select kid from tablename a where exists
(select 1 from tablename b where b.KID = a.KID and b.GRP = 'ABS')
and GRP = 'AOR'

这也将确保您在不使用distinct

的情况下仅为每个KID获得一个结果