Sql 如何选择没有union和union all的两个表?
表1: 我需要连接两个表,而不使用Sql 如何选择没有union和union all的两个表?,sql,sql-server,Sql,Sql Server,表1: 我需要连接两个表,而不使用Union和Union All 例如: (两个表列都是相同的,除了列添加到最后的Id之外) 现在将不会出现“错误”。对于非联合方式,您可以使用一个临时表,如下所示 select t.ID, t.Text, t.ParentID, t.Number, cast(NULL as int) as TO_ID from Table1 union all select t.ID, NULL as Text, t.ParentID, t.Number, t.To_ID
Union
和Union All
例如:
(两个表列都是相同的,除了列添加到最后的Id之外)
现在将不会出现“错误”。对于非联合方式,您可以使用一个临时表,如下所示
select t.ID, t.Text, t.ParentID, t.Number, cast(NULL as int) as TO_ID
from Table1
union all
select t.ID, NULL as Text, t.ParentID, t.Number, t.To_ID
from Table2 t
我只会在某些情况下使用这种方法,我肯定需要一个临时结果表,或者我的逻辑由于某种原因而被打破,这在以后的情况下非常罕见。还有其他方法,但如果您不使用临时表联合,则所有方法的性能都应优于其他方法。尝试
完全连接
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
CREATE TABLE #TempTable (
Id INT
,[Text] VARCHAR(20)
,ParentId INT
,Number INT
,ToId INT
)
INSERT INTO #TempTable (Id, [Text], ParentId, Number)
SELECT
Id
,[Text]
,ParentId
,Number
FROM
TableNameA
INSERT INTO #TempTable (Id, ToId, ParentId, Number)
SELECT
Id
,ToId
,ParentId
,Number
FROM
TableNameB
SELECT *
FROM
#TempTable
资料
为什么不使用UNION或UNION all?没有礼貌是可行的,但不容易做到。是否允许临时表或表变量?Union/Union all将是最有效的codeam在我的代码中使用Union,它将显示错误。因为我要执行此步骤..是否可以使用完全联接?我的意思是,您可以将两个表中的值插入到临时表中,然后从临时表中选择,但使联合工作是最简单的方法。。。我会按照@TimBiegeleisen的建议发布产生错误的查询。@Asiyana2010谢谢我错过了专栏轮班我很感激Asistance OP说不要使用Union或Union All。你的回答没有帮助。
select t.ID, t.Text, t.ParentID, t.Number, cast(NULL as int) as TO_ID
from Table1
union all
select t.ID, NULL as Text, t.ParentID, t.Number, t.To_ID
from Table2 t
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
CREATE TABLE #TempTable (
Id INT
,[Text] VARCHAR(20)
,ParentId INT
,Number INT
,ToId INT
)
INSERT INTO #TempTable (Id, [Text], ParentId, Number)
SELECT
Id
,[Text]
,ParentId
,Number
FROM
TableNameA
INSERT INTO #TempTable (Id, ToId, ParentId, Number)
SELECT
Id
,ToId
,ParentId
,Number
FROM
TableNameB
SELECT *
FROM
#TempTable
select isnull(a.id,b.id) as id,
a.Text1,isnull(a.ParentId,b.ParentId) parentid,
isnull(a.Number,b.Number) numm,TOid
from @t a
full join @t1 b on a.Id=b.Id and a.ParentId=b.ParentId
declare @t table (Id int,Text1 varchar(50),ParentId int, Number int) insert into @t
(Id,Text1,ParentId, Number) values
(101 ,'robber' , 201 , 1),
(102 ,'devel' , 202 , 1),
(103 ,'programmer' , 203 , 3)
declare @t1 table (Id int,TOid int,ParentId int, Number int) insert into @t1
(Id,TOid,ParentId, Number) values
(102 ,355 , 201 , 1),
(104 ,366 , 202 , 2),
(105 ,377 , 203 , Null)