SQL Server 2008中聯合選擇語句的結果包括在任何源表中找不到的記錄。示例:SQL Server 2008聯合選擇'創建'不存在的記錄
theid是每個源表中的整數ID值。無論是表包括277741.
Select *
From DataTable1
WHere theid = 277741
-- 0 records returned
Select *
From DataTable2
Where theid = 277741
-- 0 records returned
theid值但是,當您運行下面的聯盟Select語句,爲theid產生的記錄。
Select *
Into ConjoinedData
From DataTable1
Union
Select *
From DataTable2
Where theid Not In (Select theid From DataTable1)
Select
From ConjoinedData
Where theid = 27741
-- 1 record returned
theid字段不是任一個源表中的標識字段。最終,DataTable1和DataTable2的數據來自同一父級,其內容包含ID爲277741的不相關記錄。但是,它們之間或任何源表上的任何其他表都沒有外鍵關係。我試圖更改爲Union All查詢,但沒有成功。我在這兩個源表中都創建了一個索引,並且出現了「已創建」記錄。我已經無數次地刪除並重新創建了源表。爲什麼SQL Server從斷開連接的父表中獲取不相關的記錄(源數據都是使用Select..Into語句從同一父節點進行的,並且沒有任何外鍵關係到任何一個表回到父節點)?
請提供一個顯示您的問題的repro腳本。 –
已經提供的腳本中缺少的內容需要什麼? –
注意UNION消除重複的,所以您的查詢 選擇* 進入ConjoinedData 從DataTable1 聯盟 選擇* 從DataTable2 凡theid不在(選擇theid從DataTable1) 應該只是 選擇* 進入ConjoinedData 來自DataTable1 Union 選擇* 來自DataTable2 是「theid」唯一嗎?它是一個int嗎? –