表1:
Id | Text | Parent Id | Number
**************************************
101 |robber | 201 | 1
102 |devel | 202 | 1
103 |programmer | 203 | 3
Table 2
Id | TO id | Parent Id | Number
**************************************
102 |355 | 201 | 1
104 |366 | 202 | 2
105 |377 | 203 | Null
我需要在不使用Union
和union All
Out Put Like: (两个表列都相同,期望列添加到最后一个到的Id)
Id | Text | Parent Id | Number | To Id
101 |robber | 201 | 1 | Null
102 |devel | 202 | 2 | null
103 |programmer | 203 | 3 |Null
102 |Null | 201 | 1 |355
104 | Null | 202 | 2 | 366
105 |Null | 203 | null | 377
答案 0 :(得分:2)
尝试完整联合
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)
答案 1 :(得分:1)
并且对于非联合方式,您可以使用临时表,如下所示
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
我只会在这种情况下使用这种方式,我肯定想要一个结果的临时表,或者我的逻辑由于某种原因必须被分解,后来非常罕见。还有其他方法,但如果你没有使用临时表联合,那么所有方法都应该比其他方式更好。
答案 2 :(得分:0)
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
现在没有"错误"。