2009-09-15 45 views
16

我有一个表programparticipants。我目前正在成功查询ID为count(name) > 1。我现在需要的是查询属于这些ID的名称,其中count(name) > 1SQL查询需要获取名称,其中count(id)= 2

导致例如目前正在返回的数据:

ID  count(name) 
1  2 
3  4 
4  3 

例,结果所需要的数据:

ID  name 
1  nm1 
1  nm3 
3  nm2 
3  nm3 
3  nm4 
3  nm7 
4  nm5 
4  nm8 
4  nm9 

回答

6

您可以使用此:

SELECT 
    (SELECT name FROM participants WHERE id=p.participantid) AS name 
FROM 
    programparticipants AS p 
WHERE 
    .... (the part where you find count(name)>1) 
+0

这是通过使用每个人的建议和拼凑在一起 – mattgcon 2009-10-28 17:14:46

2
select id, Name 
from programparticipants 
where id in (<your current query selecting only id here>) 
+0

'<你当前的查询只选择ID而不是COUNT(*)here>'? – 2009-09-15 22:24:19

+0

嗯...是的。修复... – 2009-09-15 22:50:41

51
select count(id), name 
from programparticipants 
group by name 
having count(id) > 1 
+1

恕我直言,这应该是正确的答案。有点晚了,但嘿... – seebiscuit 2015-02-11 01:00:55

4

我认为GROUP BY and HAVING是你想要的。

+0

是的,一些组合,并具有肯定是他所需要的。问题中没有足够的细节来编写整个查询。 – 2009-09-15 22:26:22

+0

我甚至没有尝试过。这条链接是我能够迅速提出的最好的链接。 – duffymo 2009-09-15 22:42:34

1

想想你会想看看组通过与具有:

select id, name, count(name) from table group by 2,1 having count(name) = 2; 

您可以替换= 2> 1,具体取决于任何你想要的(标题所说= 2,问题说> 1)

1
SELECT id, Name 
FROM programparticipants 
GROUP BY id, Name 
HAVING COUNT(*) > 1