2016-07-22 8 views
0

Ich versuche, zwei Tabellen zu verknüpfen, die wie folgt aussehen:Anschließen von zwei einfachen Tabellen mit nulls

Table A 
ID X 
1 0 
1 8 

Table B 
ID Y 
1 0 
1 24 
1 48 

in etwas, das wie folgt aussieht:

Table D 
ID X  Y 
1  0  0 
1  8  24 
1  NULL 48 

Oder noch wird diese Arbeit:

Table C 
ID X  Y 
1  0  NULL 
1  8  NULL 
1  NULL 0 
1  NULL 24 
1  NULL 48 

Aber:

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 

Hält mich dies geben:

Table X 
ID X  Y 
1  0  0 
1  0  24 
1  0  48 
1  8  24 
1  8  48 
+0

Das Ergebnis Sie bekommen nicht mit, was ich bekomme, wenn ich es selbst tun: http://sqlfiddle.com/#!9/30dc0/4/0 – fedorqui

Antwort

1

dies wird die Lösung mit NULL-Werte geben:

SELECT ID, X, null as Y FROM "Table A" 
UNION ALL 
SELECT ID, null X, Y FROM "Table B" 

Ich hoffe, es hilft.

+0

Interessant, hat den Charme. Vielen Dank. –

1

Verwendung union all.

select id,x,null y from tablea 
union all 
select id,null,y from tableb 

oder full join.

select a.id,a.x,b.y 
from tablea a 
full join tableb b on a.id = b.id 
+0

Das 'UNION ALL' bringt mir, was ich brauche, außer dass ich keinen Spaltennamen für die 'y'-Spalte bekomme ... irgendwelche Ideen? –

0

ROWNUM und 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