2009-08-11 9 views
0

i eine Tabellewie nur alle duplizierten Einträge zurückgeben SQL

mit haben
create table test(id int not null primary key, day date not null); 

insert into test(id, day) values(1, '2006-10-08'); 
insert into test(id, day) values(2, '2006-10-08'); 
insert into test(id, day) values(3, '2006-10-09'); 

select * from test; 
+----+------------+ 
| id | day  | 
+----+------------+ 
| 1 | 2006-10-08 | 
| 2 | 2006-10-08 | 
| 3 | 2006-10-09 | 
+----+------------+ 


select day, count(*) from test GROUP BY day; 
+------------+----------+ 
| day  | count(*) | 
+------------+----------+ 
| 2006-10-08 |  2 | 
| 2006-10-09 |  1 | 
+------------+----------+ 


select day, count(*) from test group by day HAVING count(*) > 1; 
+------------+----------+ 
| day  | count(*) | 
+------------+----------+ 
| 2006-10-08 |  2 | 
+------------+----------+ 

Was, mein Bedürfnis ist, ich die doppelten Einträge

Dies ist die einfache heraus gesetzt zurückkommen müssen, die ich brauchen

+------------+----------+ 
| day  | id | 
+------------+----------+ 
| 2006-10-08 |  2 | 
| 2006-10-08 |  1 | 
+------------+----------+ 

Antwort

6

ein Try Self-Join

SELECT T1.day, T1.id 
FROM test T1 
INNER JOIN test T2 
ON T1.id <> T2.id AND T1.day = T2.day 
0
select id, count(day) as cnt from test group by day HAVING cnt > 1; 
Verwandte Themen