我有一个看起来像这样的表:
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语句可以搜索此条目?
提前致谢...
答案 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">
这是使用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
答案 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