2016-04-15 10 views
0

Mein Problem ist extrem ähnlich wie diese: Select rows which are not present in other tableZeilen einfügen in eine Tabelle, die nicht existieren, aus einer anderen Ansicht

unterscheidet sich aber dadurch, dass ich Daten aus einer Ansicht bin abrufen, anstatt einen anderen Tisch. Allerdings ist die Unterauswahlabfrage keine Datensätze zurück, und ich habe die INSERT INTO die SELECT-Abfrage

Hier zu testen weggelassen ist, was ich so weit gekommen:

SELECT SourceT.*, DestT.Column1, DestT.Column2 
FROM 
    ViewA SourceT 
LEFT OUTER JOIN 
    TableA DestT 
ON 
    SourceT.Column1 = DestT.Column1 AND 
    SourceT.Column2 = DestT.Column2 AND 
    SourceT.Column3 = DestT.Column3 AND 

**** alles funktioniert fINE BIS HIER

WHERE 
    DestT.Column1 = NULL AND 
    DestT.Column2 = NULL AND 
    DestT.Column3 = NULL 

Wenn ich die WHERE-Bedingungen auslassen, gibt es alle Datensätze aus Source der zusammen mit Werten von NULL für die Datensätze nicht in DestT gefunden - das funktioniert gut. Wenn ich die WHERE-Klausel am Ende hinzufüge (selbst bei nur einer Bedingung), gibt sie Nullwerte zurück.

Ich kann versuchen, DestT.Column1 = NULL oder DestT.Column1 <> NULL - immer noch nichts zurückgegeben wird. Meine Abfrage gibt NULL-Werte korrekt zurück, aber die WHERE-Bedingung funktioniert nicht oder lässt keine Daten durch.

Irgendeine Idee, was hier passiert? Im Wesentlichen versuche ich, Zeilen aus einer Sicht in TabelleA einzufügen, wo sie nicht bereits existieren, basierend auf einer Anzahl von Bedingungen.

Danke

+0

Jeder? Ich habe auch versucht die Bedingung Hinzufügen DestT.Column1 = NULL nach LINKS ohne Glück JOIN:/ – SomeOne

+0

Ich habe es ohne die innere Arbeit bei und Hinzufügen des folgenden: WO NICHT VORHANDEN \t (SELECT * FROM Tabelle \t WHERE ... Bedingungen) Aber verdammt die Abfrage ist langsam @ nur über 2 Minuten für 10.000 Datensätze in jeder Tabelle? – SomeOne

Antwort

1

Ändern Sie die = im Vergleich zu IS NULL etwas anders gehandhabt wird:

WHERE 
DestT.Column1 IS NULL AND 
DestT.Column2 IS NULL AND 
DestT.Column3 IS NULL 

Wenn Sie einen Nicht-Nullable-Spalte in Ihrem Ziel haben, sollten Sie einfach sein in der Lage, zu überprüfen, dass das NULL ist, anstatt mehrere Spalten zu überprüfen - Primärschlüssel wäre Ihre beste Wette, wenn die Tabelle einen hat.

+0

Tolles Zeug, mein schlechtes für mehr Aufmerksamkeit. Dies wird auch meine Abfragezeit auf eine sehr akzeptable 4 Sekunden. Kudos :) – SomeOne

0

Die richtige Syntax ist 'IS NULL', nicht '= NULL'.

WHERE 
    DestT.Column1 IS NULL AND 
    DestT.Column2 IS NULL AND 
    DestT.Column3 IS NULL 
Verwandte Themen