2016-12-20 5 views
0

Ich habe zwei Tabellen in Access, eine mit IDs (nicht eindeutig) und einige Namen und eine mit IDs (nicht eindeutig) und Standort. Ich möchte eine dritte Tabelle zurückgeben, die nur die IDs der Elemente enthält, die mehr als einmal in Name oder Ort erscheinen.Join Tabelle auf Count

Tabelle 1

ID Name 
1  Max 
1  Bob 
2  Jack 

Tabelle 2

ID Location 
1 A 
2 B 

Grundsätzlich in dieser Konfiguration nur ID 1, weil 1 erscheint zweimal in Tabelle 1 zurückkehren sollte:

ID 
1 

ich versucht habe, um einen JOIN auf den Tischen zu machen und dann einen COUNT anzulegen, aber nichts kam heraus.

Vielen Dank im Voraus!

Antwort

0

helfen ist eine Methode, die ich denke, wird in MS Access arbeiten:

(select id 
from table1 
group by id 
having count(*) > 1 
) union -- note: NOT union all 
(select id 
from table2 
group by id 
having count(*) > 1 
); 

MS Access erlaubt es nicht, union/union all in der from Klausel. Es unterstützt auch nicht full outer join. Beachten Sie, dass die union Duplikate entfernt.

+0

Es hat perfekt funktioniert! Vielen Dank! – Batmax

0

Einfache group by- und having-Klausel sollten Sie hier

select ID  
From Table1 
Group by ID  
having count(1)>1 
union 
select ID  
From Table2 
Group by ID  
having count(1)>1 
-1

nicht sicher, ob ich verstehen, welche Abfrage Sie bereits versucht, aber dies sollte funktionieren:

select table1.ID 
    from table1 inner join table2 on table1.id = table2.id 
group by table1.ID 
having count(*) > 1 

Oder wenn Sie IDs in einer Tabelle haben, aber nicht die andere

select table1.ID 
    from table1 full outer join table2 on table1.id = table2.id 
group by table1.ID 
having count(*) > 1 
+0

Bei diesem Ansatz wird davon ausgegangen, dass alle IDs in beiden Tabellen enthalten sind. –

+0

Die Annahme ist vernünftig angesichts der Informationen in der Frage, aber ok ... behoben. –

0

Basierend auf Ihrer Beschreibung, Sie müssen keine Tabellen beitreten, um doppelte Datensätze zu finden. Wenn Ihre Tabelle die oben angegebene Tabelle ist, verwenden Sie einfach:

With A as ( select ID,count(*) as Times From table group by ID ) select * From A where A.Times>1