Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择没有union和union all的两个表?_Sql_Sql Server - Fatal编程技术网

Sql 如何选择没有union和union all的两个表?

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

表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
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)