2017-07-27 73 views
0

我有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) 

有什麼問題或是否有可能該查詢返回比表之間的區別嗎?謝謝

+1

這是非常正常的,因爲返回的結果比兩個表之間的記錄計數差異大。不僅在'B'中有不在'A'中的記錄,而且'A'也可能有'B'沒有的記錄。如果您認爲這是不正確的,您應該仔細查看您的數據。正如所寫的,你的查詢看起來很好。 – Siyual

+0

你確定你所有的記錄都來自B嗎? –

+0

我通常在兩個表格之間進行聯合檢查兩個方向上的匹配。 –

回答

-2

除了區別之外,您可能會從TableB中拉出一些行,其中ID真的爲空,因爲相等性不適用於空值。

所以正確的方法,如對方回答說,是設置NULL條件爲ON子句的一部分,而不是WHERE

+1

'Null'條件*意圖*在'Where'子句中,因爲它們只想選擇'外部連接'檢查失敗的記錄。將它移到'On'子句中*不是解決方案(並且會導致零結果,因爲'A.Id = B.Id和B.Id是Null'永遠不會導致真實。) – Siyual

+0

訪問還限制了什麼字段和條件可以出現在join ON子句中 - 它會返回一個錯誤。 –

+0

@Siyual:NULL在=時產生不一致的結果,這就是爲什麼含義不明確 –

1

您的查詢顯示,從表格中的行沒有在表中的比賽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子句中使用列名而不是*。