2016-04-11 52 views
0
select 'A' as ctable, a.coll1, a.coll2, a.coll3 from TABLE_A a 
union all 
select 'B' as ctable, b.coll1, b.coll2, b.coll3 from TABLE_B b 

Çıktı: İşteJOIN anahtar sözcüğünü kullanarak birleşim yapabilir miyim?

CTABLE COLL1 COLL2 COLL3 
A  01  abc  bac 
A  02  das  asd 
A  03  eas  sae 
B  01  bad  dab 
B  04  bmn  nmb 
B  05  cas  sac 

i JOIN kullanarak aynı çıktı istiyoruz. Coll1, her iki tablo için birincil anahtardır. Tablo boş olabilir veya veriler aynı olabilir ancak çıktı her iki tablonun tüm satırları olacaktır.

+4

Neden "JOIN"? UNION ALL için neredeyse mükemmel bir durum gibi görünüyor. –

+0

SQL –

+0

'un yedekini atlamak istiyorum "Yedek" ile ne demek istiyorsun? Bir JOIN ile aynı sonucu elde etmek için, bir UNION ALL'dan daha fazla koda ihtiyacınız olacaktır, daha az değil, ve sonuçta ortaya çıkan kod daha az verimli, daha az okunabilir olacaktır ... – Aleksej

cevap

0

Bu BİRLİĞİ aynı performansı vermiyor olabilir ama ben bir görünüm oluşturmak için gereken bu

aradığınızı olduğunu düşünüyorum:

create view mutex as 
select i 
from (select 0 
union 
select 1)sq (i) 

Şimdi almak için bu görünümü kullanabilirsiniz

select coalesce(a.A,b.B),coalesce(a.coll1,b.coll1),coalesce(a.coll2,b.coll2),coalesce(a.coll3,b.coll3) 
from mutex 
left join TABLE_A as a on i =0 
left join TABLE_B as b on i =1 

Not: olarak istenen sonuçlar yerine mutex bakış, aynı zamanda bu 2 satır olacak bir tablo kullanabilirsiniz