我的INNER JOIN正在過濾掉太多,或者我看不出有什麼不同。我的INNER JOIN正在過濾掉太多
我想在同一臺服務器上合併來自2個不同數據庫的2個表。
我的第一步是要找到所有匹配的值:
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
我已經檢查的所有列,它們是相同的類型和相同的VARCHAR值。所以這個查詢應該帶回所有的匹配值。
但是......情況並非如此。它只返回200+的記錄,在那裏,如果我運行此查詢後,我插入200+記錄到一個臨時表:
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
該查詢返回1500+行。
我已經運行了一個與美國數據類似的查詢,發現相同的差異(返回1500+行)。
我只看了一條記錄,看看是否可以識別出一些令人毛骨悚然的東西,並且我發現每張表(INTL和US)的記錄完全相同!
DataID: 1
AnotherID: 1
DataValue: NULL
TextValue: NORMAL
DefaultValue: 0
RateValue: NULL
YetAnotherID: 1
我想象我的內連接的結構上找到2個表之間的差異,但我無法看到它。
任何想法會導致這種情況?
可能是'NULL'值。 'NULL'不等於任何東西,甚至不是另一個'NULL'。因此,在比較「NULL」列時,它將無法通過相等性檢查,從而使您的'LEFT JOIN'數字膨脹。 – Siyual
真的......我不知道。你有任何建議讓這個工作,或者我應該不匹配可能是NULL的列? – webdad3
一個處理這種方式將這些空值實際值:'COALESCE(TDT.DataValue, '@#$%!')= COALESCE(TDT.DataValue, '@#$%!')' – shawnt00