SQL Server, alternative zu not exists
Moin,
ich habe eine SQL Abfrage die 2 Tabellen mit einem UNION Zusammenführt, allerdings nur die Einträge übernimmt wo sich die Belegnummern nicht überschneiden. Sprich es kann sein das diese Belegnummer in beiden Tabellen vorhanden ist. Um doppelte EInträge zu vermeiden Prüfer ich mit not exists ab. Klappt soweit auch gut, nur sind die Tabellen mittlerweile so groß das die Abfrage verdammt lange läuft, daher suche ich jetzt eine Alternative zu Not Exists.
Hier die vereinfachte Darstellung meiner jetzigen Abfrage:
SELECT Belegnummer, Spalte1, Spalte2, Spalte3 FROM Tabelle1 as K
UNION ALL
SELECT Belegnummer, Spalte1, Spalte2, Spalte3 FROM Tabelle2 as K
WHERE (NOT EXISTS (SELECT Belegnummer FROM Tabelle1 AS T1 WHERE (Belegnummer = K.Belegnummer)))
Wie gesagt, Abfrage funzt, allerdings würd ich gerne die Laufzeit optimieren. Hat vielleicht jemand eine Idee wie ich das Umbauen könnte?
Gruß
Tobi
ich habe eine SQL Abfrage die 2 Tabellen mit einem UNION Zusammenführt, allerdings nur die Einträge übernimmt wo sich die Belegnummern nicht überschneiden. Sprich es kann sein das diese Belegnummer in beiden Tabellen vorhanden ist. Um doppelte EInträge zu vermeiden Prüfer ich mit not exists ab. Klappt soweit auch gut, nur sind die Tabellen mittlerweile so groß das die Abfrage verdammt lange läuft, daher suche ich jetzt eine Alternative zu Not Exists.
Hier die vereinfachte Darstellung meiner jetzigen Abfrage:
SELECT Belegnummer, Spalte1, Spalte2, Spalte3 FROM Tabelle1 as K
UNION ALL
SELECT Belegnummer, Spalte1, Spalte2, Spalte3 FROM Tabelle2 as K
WHERE (NOT EXISTS (SELECT Belegnummer FROM Tabelle1 AS T1 WHERE (Belegnummer = K.Belegnummer)))
Wie gesagt, Abfrage funzt, allerdings würd ich gerne die Laufzeit optimieren. Hat vielleicht jemand eine Idee wie ich das Umbauen könnte?
Gruß
Tobi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139366
Url: https://administrator.de/contentid/139366
Ausgedruckt am: 14.11.2024 um 05:11 Uhr
12 Kommentare
Neuester Kommentar
Moin Budda,
da musst gar keinen zusätzlichen Heckmeck machen, sondern nur das UNION ALL in ein einfaches UNION ändern.
UNION ALL: Verknibbelt alle Datensätze aus dem ersten SELECT und Alle Datensätze aus dem zweiten SELECT.
UNION: verknibbelt nur alle "einmaligen" Datensätze aus den SELECTs bezogen auf das ORDER BY Belegnr, das hoffentlich ohnehin folgt.
Grüße
Biber
da musst gar keinen zusätzlichen Heckmeck machen, sondern nur das UNION ALL in ein einfaches UNION ändern.
UNION ALL: Verknibbelt alle Datensätze aus dem ersten SELECT und Alle Datensätze aus dem zweiten SELECT.
UNION: verknibbelt nur alle "einmaligen" Datensätze aus den SELECTs bezogen auf das ORDER BY Belegnr, das hoffentlich ohnehin folgt.
Grüße
Biber
Moin Budda,
das kann nicht sein, dass kein DISTINCT auf einen Textdatentyp möglich ist.
Die Ursache muss in einem Unterschied der Datenfelder in Tabelle 1 und Tabelle2 liegen - bitte kontrolliere bzw. poste mal die relevanten (=im UNION enthaltenen) Felder der beiden Tabellen laut DDL-Script.
Irgendwas läuft da schräg...
Grüße
Biber
das kann nicht sein, dass kein DISTINCT auf einen Textdatentyp möglich ist.
Die Ursache muss in einem Unterschied der Datenfelder in Tabelle 1 und Tabelle2 liegen - bitte kontrolliere bzw. poste mal die relevanten (=im UNION enthaltenen) Felder der beiden Tabellen laut DDL-Script.
Irgendwas läuft da schräg...
Grüße
Biber