2017-11-13 1 views
0

Ich muss Datensätze von einem System auf ein anderes migrieren. Es gibt 4 verschiedene Tische. Die erste Tabelle enthält alle Informationen zu jedem Benutzer. Jede Zeile hat eine eindeutige ID, die der Primärschlüssel ist. Also muss ich den Primärschlüssel aus der ersten Tabelle holen und den passenden Datensatz in den anderen 3 Tabellen finden. Diese Tabellen haben einen Fremdschlüssel, den wir verwenden sollten, um die Nutzer zu vergleichen. Hier ist Beispiel:Wie findet man Datensätze, die in allen 4 Tabellen existieren? SQL Server 2008

SELECT * 
FROM Users AS ur 
WHERE EXISTS(
    SELECT * 
    FROM TableA AS a 
    WHERE ur.ur_id = a.a_urid 
) 

//Maybe second option can be to use INNER JOIN 
SELECT * 
FROM Users AS ur 
    INNER JOIN TableA AS a 
     ON ur.ur_id = a.a_urid 
    INNER JOIN TableB AS b 
     ON ur.ur_id = b.b_urid 
    INNER JOIN TableC AS c 
     ON ur.ur_id = c.c_urid 

Abfrage oben kehrt Datensätze nur für Benutzer und Tabelle A. passend Ich frage mich, wenn ich alle Datensätze aus Tabelle Benutzer entsprechen können, die passenden Benutzer-ID in der Tabelle A, B und C. Wie kann das in SQL Server 2008 erreicht werden? Oder müsste ich jeden Tisch einzeln hinzufügen/importieren? Wenn jemand bei dieser Aufgabe helfen kann, lass es mich wissen. Vielen Dank!

+0

Inner Join jeder Tabelle ... scheint logisch – scsimon

+0

Das 'inner-join' Tag, den Sie haben, sieht vielversprechend aus. –

Antwort

1

Sie können intersect verwenden:

select u.id 
from users u 
intersect 
select a.a_urid 
from a 
intersect 
select b.b_urid 
from b 
intersect 
select c.c_urid 
from c; 

Ein anderer Weg ist exists zu verwenden:

SELECT ur.* 
FROM Users ur 
WHERE EXISTS (SELECT 1 FROM TableA AS a WHERE ur.ur_id = a.a_urid) AND 
     EXISTS (SELECT 1 FROM TableB AS b WHERE ur.ur_id = b.b_urid) AND 
     EXISTS (SELECT 1 FROM TableC AS c WHERE ur.ur_id = c.c_urid) ; 

eine JOIN verwenden, müssen Sie vorsichtig sein. Die Ergebnismenge könnte Duplikate enthalten. Und das Entfernen der Duplikate könnte sehr teuer sein.

Verwandte Themen