T-SQL: Vergleich Zweier Tabellen - Datensätze, die nicht vorhanden sind in der zweiten Tabelle
Wenn UNION ALL
ist ein neben in T-SQL. Was ist das äquivalent der Subtraktion?
Zum Beispiel, wenn ich eine Tabelle PEOPLE
und eine Tabelle EMPLOYEES
. Und ich weiß, wenn ich entfernen EMPLOYEES
Datensätze aus PEOPLE
ich mit der linken mein Unternehmen CONTRACTORS
.
Gibt es eine Möglichkeit, dies zu tun, ist ähnlich zu UNION ALL
? Eine, wo ich nicht haben, um geben Sie beliebige Feldnamen? Der Grund warum ich Frage ist, das ist nur ein hypothetisches Beispiel. Ich muss dies tun, mehrere Male, um viele verschiedene Tabellen. Davon ausgehen, dass das schema von EMPLOYEES
und PEOPLE
sind die gleichen.
InformationsquelleAutor BuddyJoe | 2008-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle von UNION, verwenden, AUßER, ( oder INTERSECT", um nur die Datensätze in beiden )
wie beschrieben in
msdn AUßER Link für Sql2k8
msdn AUßER Link für Sql2k5
InformationsquelleAutor Charles Bretana
Können Sie die AUßER (operator) subtrahieren mit einem Satz aus dem anderen. Hier ist ein Beispiel code mit MITARBEITERN und MENSCHEN, die temporäre Tabellen. Sie müssen verwenden Sie die Feldnamen mit der AUSNAHME der Betreiber, soweit ich weiß.
In der letzten Abfrage zurück, die zwei Zeilen in der PERSONEN-Tabelle, die nicht vorhanden sind in der Tabelle EMPLOYEE.
InformationsquelleAutor Eric Ness
Für SQL Server-dies wird wahrscheinlich die meiste leistungsfähige Weise, dass Sie es tun können.
Ein left outer join gibt alle Datensätze aus der linken Tabelle, unabhängig davon, ob eine übereinstimmung gefunden wurde in der zweiten Tabelle. Es kann nicht verwendet werden, wenn Sie möchten, um nur diejenigen Datensätze aus der ersten Tabelle, die nicht vorhanden sind, sind in der zweiten Tabelle. 🙂
Das ist der Grund, warum die WHERE-Klausel enthält "E. ID IS NULL". Bevor er erklärte, dass etwas falsch ist, sollten Sie wahrscheinlich es zu verstehen und im Idealfall zu testen.
Ich Stimme dir zu, deine Lösung ist schneller in SQL server. Bitte Lesen Sie diese post, sqlservercentral.com/Forums/Topic541726-338-1.aspx
Dies ist eine gute Lösung, aber, dabei einige aktuelle performance-Analyse, rannte ich in Situationen, in denen dies zu tun, ist NICHT unbedingt die performante Wahl. Soweit ich das beurteilen kann, der Grund ist, dass, wenn die mitmachen würden, führen zu einer GROßEN Anzahl der verknüpften Datensätze, SQL muss die Verknüpfung ausführen, um den NULL-test. In diesen Fällen kann es viel schneller zu verwenden, die eine Unterabfrage in der where-Klausel ist wie die WHERE not EXISTS(Select 1 from Mitarbeiter e, wo e.id = p.id). Es ist sehr abhängig von der relativen Größen der beiden Tabellen.
InformationsquelleAutor Tom H
Hinzugefügt, die NICHT NULL IST, Menschen glücklich zu machen.
Ich würde Zustimmen, Tom. Seine version ist wahrscheinlich effizienter. Der einzig mögliche Grund, mir zu verwenden, könnte sein, dass es schöner.
hinzufügen IST NICHT NULL dann, wenn Sie erwarten, dass NULL ist, aber ich gehe davon aus Tabelle2.Der Schlüssel ist PK und nicht NULL ist
InformationsquelleAutor Greg Dean
Leider gibt es ein problem in Ihrem design.
anstatt zwei Tabellen PERSONEN und AUFTRAGNEHMER.
Sie sollten eine Tabelle PERSONEN und eine weitere Tabelle GEBEN (, wenn manche Menschen können mehrere Rolle einer anderen Tabelle vielleicht brauchte).
In Ihrem MENSCHEN-Tisch stellen Sie eine referece der TYP-Tabelle.
dann Anfragen werden
(ungetestet)
InformationsquelleAutor call me Steve
Wenn ich Tabellen vergleichen suchen von Daten, die nicht in eine der anderen, ich in der Regel verwenden Sie SQL-Division.
Dieser Abfrage die Ergebnisse sind in Tabelle a, die nicht durch den Prozess der Teilung.
Diese Abfrage gibt alle Zeilen der Daten, die eine übereinstimmung in beiden Tabellen daher gibt es eine Reihe von Daten, die in Tabelle a nicht in Tabelle B die Zeile von Daten nicht abgerufen werden.
InformationsquelleAutor xkonnectDeveloper
Fand ich, es ist viel einfacher ein Werkzeug zu bedienen ist wie SQLMerger um dies für Sie tun. Die Ergebnisse werden angezeigt, in einer schöneren Weise, und Sie können mit dem weitermachen, was Sie tun müssen, um mit den Daten danach einfach.
http://www.auisoft.com/SQLMerger <= das tool, das macht es einfach, Daten zu vergleichen
Beispiel auf den Vergleich von zwei Tabellen: http://auisoft.com/SQLMerger/How-to/visualize-differences-in-2-databases/
InformationsquelleAutor