Mein INNERER JOIN filtert zu viel heraus oder ich kann nicht sehen, was der Unterschied ist.Mein INNERER JOIN filtert zu viel heraus
Ich versuche, 2 Tabellen aus 2 verschiedenen Datenbanken auf demselben Server zu konsolidieren.
Mein erster Schritt ist es, alle Werte zu finden, die passen:
SELECT intl.*
FROM tblData intl
INNER JOIN [db].dbo.tblData us
ON intl.DataID = us.DataID
AND intl.AnotherID = us.AnotherID
AND intl.DataValue = us.DataValue
AND intl.TextValue = us.TextValue
AND intl.DefaultValue = us.DefaultValue
AND intl.RateValue = us.RateValue
AND intl.YetAnotherID = us.YetAnotherID
ich alle Spalten überprüft haben, und sie sind die gleichen Typs und gleicher varchar Werte. Diese Abfrage sollte also alle übereinstimmenden Werte zurückgeben.
Allerdings ... Das ist nicht der Fall. Es kehrt nur 200+ Aufzeichnungen, wo, wenn ich diese Abfrage ausführen, nachdem ich die 200+ Datensätze in eine temporäre Tabelle einfügen:
SELECT intl.DataID
FROM tblData intl
LEFT JOIN TempDataTable TDT
ON TDT.DataID = intl.DataID
AND TDT.AnotherID = intl.AnotherID
AND TDT.DataValue = intl.DataValue
AND TDT.TextValue = intl.TextValue
AND TDT.DefaultValue = intl.DefaultValue
AND TDT.RateValue = intl.RateValue
AND TDT.YetAnotherID = intl.YetAnotherID
WHERE TDT.DataID IS NULL
Diese Abfrage 1500 Zeilen zurückgibt.
Ich habe eine ähnliche Abfrage mit den US-Daten ausgeführt und die gleiche Diskrepanz gefunden (1500+ Zeilen zurückgegeben).
Ich schaute auf 1 Datensatz nur um zu sehen, ob ich etwas whacky identifizieren konnte, und ich fand, dass die Datensätze von jeder Tabelle (INTL und US) GENAU die gleichen sind!
Ich stelle mir vor, dass meine innere Verbindung einen Unterschied zwischen den 2 Tabellen strukturell findet, aber ich kann es nicht sehen.
Irgendwelche Ideen zu was würde dies verursachen?
wahrscheinlich die 'NULL' Werte. 'NULL' ist nichts, nicht einmal ein' NULL'.Also, wo es die 'NULL'-Spalten vergleicht, würde es die Gleichheitsprüfung fehlschlagen und auf diese Weise Ihre' LINKEN JOIN'-Nummern aufblasen. – Siyual
Wirklich ... das wusste ich nicht. Haben Sie irgendwelche Vorschläge, um dies zum Laufen zu bringen oder sollte ich die Spalten, die überhaupt NULL sein könnten, nicht anpassen? – webdad3
Eine Möglichkeit, dies zu handhaben, besteht darin, diese Nullen in reale Werte umzuwandeln: 'coalesce (TDT.DataValue, '! @ # $%') = Koaleszieren (TDT.DataValue, '! @ # $%')' – shawnt00