我有2個表:A有400000條記錄,B有350000條記錄。SQL(MS-Access) - 左加入顯示左表中的記錄不在右表
我正在做一個左加入顯示兩個表之間的差異,但查詢返回約100000。
這是我的不是,在查詢:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
有什麼問題或是否有可能該查詢返回比表之間的區別嗎?謝謝
我有2個表:A有400000條記錄,B有350000條記錄。SQL(MS-Access) - 左加入顯示左表中的記錄不在右表
我正在做一個左加入顯示兩個表之間的差異,但查詢返回約100000。
這是我的不是,在查詢:
SELECT *
FROM TableA LEFT JOIN TableB
ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
有什麼問題或是否有可能該查詢返回比表之間的區別嗎?謝謝
除了區別之外,您可能會從TableB中拉出一些行,其中ID真的爲空,因爲相等性不適用於空值。
所以正確的方法,如對方回答說,是設置NULL條件爲ON子句的一部分,而不是WHERE
'Null'條件*意圖*在'Where'子句中,因爲它們只想選擇'外部連接'檢查失敗的記錄。將它移到'On'子句中*不是解決方案(並且會導致零結果,因爲'A.Id = B.Id和B.Id是Null'永遠不會導致真實。) – Siyual
訪問還限制了什麼字段和條件可以出現在join ON子句中 - 它會返回一個錯誤。 –
@Siyual:NULL在=時產生不一致的結果,這就是爲什麼含義不明確 –
您的查詢顯示,從表格中的行沒有在表中的比賽B.如果你想的差異,還需要從表B行不表A中存在,您可以用工會
SELECT *
FROM TableA
LEFT JOIN TableB ON TableA.[ID] = TableB.[ID]
WHERE (TableB.[ID] is null)
Union All
SELECT *
FROM TableB
LEFT JOIN TableA ON TableB.[ID] = TableA.[ID]
WHERE (TableA.[ID] is null)
編輯做到這一點:這是假設類似的表結構。您可能需要在select子句中使用列名而不是*。
這是非常正常的,因爲返回的結果比兩個表之間的記錄計數差異大。不僅在'B'中有不在'A'中的記錄,而且'A'也可能有'B'沒有的記錄。如果您認爲這是不正確的,您應該仔細查看您的數據。正如所寫的,你的查詢看起來很好。 – Siyual
你確定你所有的記錄都來自B嗎? –
我通常在兩個表格之間進行聯合檢查兩個方向上的匹配。 –