我有一张这样的表:
ID NAME CASE_ID
1 John 33
2 Harry 33
3 James 55
4 John 55
5 John 44
6 Harry 66
我想找到至少有两个案例的人:
ID NAME CASE_ID
1 John 33
4 John 55
5 John 44
6 Harry 66
2 Harry 33
我试过这个,但它不起作用:
SELECT name, case_id
FROM t
GROUP BY case_id
HAVING COUNT(name) > 1;
答案 0 :(得分:2)
您在select
中缺少逗号,这会更改查询的含义:
select name, case_id
from t
group by case_id
having count(name) > 1;
您的原始查询将name
列重命名为case_id
,这不是您的意图。
如果您想要原始数据,请将表格join
改为:
select t.*
from t join
(select name, count(distinct case_id)
from t
group by name
having count(distinct case_id) > 1
) nc
on t.name = nc.name;
答案 1 :(得分:1)
您需要一个子查询来完成此任务。我首先编写一个子查询,该子查询获取两个或更多不同情况下的人的姓名:
SELECT name
FROM myTable
GROUP BY name
HAVING COUNT(distinct case_id) >= 2;
您可以将此与原始表格连接,条件是名称匹配以获取所有这些人:
SELECT m.*
FROM myTable m
JOIN(
SELECT name
FROM myTable
GROUP BY name
HAVING COUNT(distinct case_id) >= 2) t ON t.name = m.name;
这将给出您想要的结果。它们是无序的,但我认为如果需要,可以添加它。
以下是SQL Fiddle示例。