仅需要使用联接就可以在一列中获得2个表的输出

时间:2019-05-26 04:07:56

标签: sql sql-server

我有此场景问题,仅需使用联接即可解决。除相交或并集以外,不能使用。

示例代码:

auto lambda_isFloat = [](float val) {return (val != floor(val)); };

-加入后我得到了

--demo setup
create table t1 (id int)
insert into t1 values (1),(2),(3)

create table t2 (id int)
insert into t2 values (4),(5),(6)

--join
select t1.id,t2.id
from t1 full outer join
t2 on t1.id=t2.id

-但我需要的是

id          id
----------- -----------
1           NULL
2           NULL
3           NULL
NULL        4
NULL        5
NULL        6

有人可以帮我吗?我知道使用联合可以轻松完成此任务,但是仅使用联接即可解决此挑战。

感谢您的帮助....

3 个答案:

答案 0 :(得分:0)

-在向代码添加大小写之后解决了挑战。

select case when t1.id is null then t2.id else t1.id end as id
from t1 full outer join
t2 on t1.id=t2.id

答案 1 :(得分:0)

您可以使用以下代码:

 SELECT case when t1.id IS NULL THEN t2.id ELSE t1.id END AS id
 FROM t1 FULL OUTER JOIN t2
 ON t1.id=t2.id

正如您所说的“从联合使用”

select * from t1
union 
select * from t2

答案 2 :(得分:0)

虽然UNION ALL是更好的选择,但是您可以使用以下脚本-

SELECT 
CASE WHEN C.ID1 IS NULL THEN C.ID2 ELSE C.ID1 END V
FROM
(
    SELECT * FROM
    (
        SELECT 'T1' TabName1,id ID1 FROM @t1 
    )A
    FULL JOIN (
        SELECT 'T2' TabName2,id ID2 FROM @t2
    )B
    ON A.TabName1 = B.TabName2
)C
ORDER BY 1