2017-12-18 5 views
0

Wir versuchen, Datensätze auszusortieren, die ein Duplikat bestimmter Spalten enthalten. Ich habe diese Abfrage so erstellt, dass jede Zeile mit einem 'N' für ihr Flag angezeigt wird, wenn in der Tabelle kein passender 'Y'-Eintrag mit demselben Nachnamen/Nachnamen vorhanden ist.Warum haben diese zwei "nicht in" -Abfragen unterschiedliche Ergebnisse?

select * from Table where LName+FName not in 
(select LName+FName from Table where FLAG = 'y') 

Dies kommt jedoch mit 0 Ergebnissen zurück. Die innere Abfrage gibt erwartete Ergebnisse zurück. Wenn ich die innere Abfrage ausführe und die Ergebniswerte wie unten manuell einfüge, wird sie mit Ergebnissen ausgeführt.

select * from Table where LName+Fname not in ('DoeJohn','AbelAdam') 

Was genau geht hier vor?

+1

können Sie versuchen, Tabellen-Aliases Hinzufügen und sehen, ob das Problem weiterhin besteht, zum Beispiel 'a select * from Table a wo a.LName + a.FName nicht. in (wählen Sie b.LName + b.FName aus Tabelle b, wobei b.FLAG = 'y') '? – a1ex07

+0

Keine Änderung im Verhalten bei beiden Alias-Tabellen. – user9114357

+0

Irgendwelche 'null' Namen in jedem Teil der Abfrage? Denn 'not in (list, including, null)' gibt immer unbestimmt zurück (und Sie sollten für verkettete 'null's 'null' liefern). Die Moral ist: Sie sollten eine Stichprobe von Daten zeigen, die das Problem aufweisen. –

Antwort

1

Ich würde vorschlagen, Ihre Daten zu suchen ... NOT IN schlägt fehl, wenn es einen NULL Wert gibt. Sie können versuchen, entweder mit NOT EXISTS oder Filterung keine Nullwerte:

select * from Table where LName+FName not in 
     (select LName+FName from Table where FLAG = 'y' AND LName+FName IS NOT NULL) 
+0

Dies schien das Problem zu sein. Einige der LName-Werte waren Nullwerte, ich habe sie in leere Strings aktualisiert, und die Abfrage wird wie erwartet ausgeführt. Vielen Dank! – user9114357

Verwandte Themen