SQL Server 2008中的union select语句的结果包括在任一源表中都找不到的记录。例如:
theid是每个源表中的整数ID值。两个表都没有包含277741的值。
Select *
From DataTable1
WHere theid = 277741
-- 0 records returned
Select *
From DataTable2
Where theid = 277741
-- 0 records returned
但是,当您运行下面的Union Select语句时,会为该id生成一条记录。
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从断开连接的父表中获取不相关的记录(源talbes都是使用Select..Into语句从同一父项创建的,并且没有外键关系到任何一个表回到父表)?
答案 0 :(得分:1)
277741
与27741
不同。以下脚本完全再现了您所描述的内容:
create table Table1 (id int);
create table Table2 (id int);
go
insert into Table1(id) values (277742);
insert into Table2(id) values (27741);
go
Select * From Table1 WHere id = 277741;
Select * From Table2 Where id = 277741;
go
Select *
Into ConjoinedData
From Table1
Union
Select *
From Table2
Where id Not In (Select id From Table1);
Select *
From ConjoinedData
Where id = 27741;