Sql 使用null连接两个简单表
我正在尝试连接两个如下所示的表:Sql 使用null连接两个简单表,sql,sql-server,Sql,Sql Server,我正在尝试连接两个如下所示的表: Table A ID X 1 0 1 8 Table B ID Y 1 0 1 24 1 48 Table D ID X Y 1 0 0 1 8 24 1 NULL 48 变成这样的东西: Table A ID X 1 0 1 8 Table B ID Y 1 0 1 24 1 48 Table D ID X Y 1 0
Table A
ID X
1 0
1 8
Table B
ID Y
1 0
1 24
1 48
Table D
ID X Y
1 0 0
1 8 24
1 NULL 48
变成这样的东西:
Table A
ID X
1 0
1 8
Table B
ID Y
1 0
1 24
1 48
Table D
ID X Y
1 0 0
1 8 24
1 NULL 48
甚至这样也行:
Table C
ID X Y
1 0 NULL
1 8 NULL
1 NULL 0
1 NULL 24
1 NULL 48
但这是:
SELECT a.ID, X, Y FROM [Table A] a
LEFT JOIN [Table] b ON a.ID = b.ID
WHERE a.ID = 1
GROUP BY a.ID, X, Y
一直给我这个:
Table X
ID X Y
1 0 0
1 0 24
1 0 48
1 8 24
1 8 48
使用
union all
select id,x,null y from tablea
union all
select id,null,y from tableb
或完全联接
select a.id,a.x,b.y
from tablea a
full join tableb b on a.id = b.id
使用
union all
select id,x,null y from tablea
union all
select id,null,y from tableb
或完全联接
select a.id,a.x,b.y
from tablea a
full join tableb b on a.id = b.id
这将提供具有空值的解决方案:
SELECT ID, X, null as Y FROM "Table A"
UNION ALL
SELECT ID, null X, Y FROM "Table B"
我希望它能有所帮助。这将提供具有空值的解决方案:
SELECT ID, X, null as Y FROM "Table A"
UNION ALL
SELECT ID, null X, Y FROM "Table B"
我希望这能有所帮助。ROWNUM和CTEs:
WITH
ra AS
(SELECT ROW_NUMBER() OVER (ORDER BY ID,X) AS row,id,x FROM a)
,rb AS
(SELECT ROW_NUMBER() OVER (ORDER BY ID,Y) as row,id,y FROM b)
SELECT COALESCE(ra.id,rb.id),x,y
FROM ra
INNER JOIN rb
ON ra.id = rb.id AND ra.row = rb.row
ROWNUM和CTEs:
WITH
ra AS
(SELECT ROW_NUMBER() OVER (ORDER BY ID,X) AS row,id,x FROM a)
,rb AS
(SELECT ROW_NUMBER() OVER (ORDER BY ID,Y) as row,id,y FROM b)
SELECT COALESCE(ra.id,rb.id),x,y
FROM ra
INNER JOIN rb
ON ra.id = rb.id AND ra.row = rb.row
如果我自己做,你得到的结果与我得到的结果不匹配:如果我自己做,你得到的结果与我得到的结果不匹配:
UNION ALL
得到了我需要的,除了我没有得到y
列的列名……有什么想法吗?那UNION ALL
得到了我需要的,除了我没有得到y
专栏的名称之外……有什么想法吗?有趣的是,魅力。谢谢。很有意思,你做了魅力。非常感谢。