sql >> Database >  >> RDS >> Sqlserver

Volledige samenvoeging van meerdere tabellen op dezelfde kolommen

Er zijn verschillende manieren, maar ik denk dat de volgende het meest populair is:

select allk.k, t1.c1, t2.v2, t3.v3, t4.v4
from (select k from t1 union 
      select k from t2 union
      select k from t3 union
      select k from t4
     ) allk left outer join
     t1
     on allk.k = t1.k left outer join
     t2
     on allk.k = t2.k left outer join
     t3
     on allk.k = t3.k left outer join
     t4
     on allk.k = t4.k;

Als je een aparte tabel hebt van alle k waarden, kunt u die gebruiken in plaats van de allk subquery.

Een eenvoudigere manier om uw full outer join te schrijven query is om coalesce() . te gebruiken :

SELECT COALESCE(t1.K, t2.K, t3.K, t4.K) [K], V1, V2, V3, V4
FROM @T1 t1 FULL JOIN
     @T2 t2
     ON t2.K = t1.K FULL JOIN
     @T3 t3
     ON t3.K = coalesce(t1.K, t2.K) FULL JOIN
     @T4 t4
     ON t4.K = coalesce(t1.K, t2.K, t3.k);

En de derde methode is de union all /group by methode:

select k, max(v1) as v1, max(v2) as v2, max(v3) as v3, max(v4) as v4
from (select k, v1, NULL as v2, NULL as v3, NULL as v4
      from t1 union all
      select k, NULL as v1, v2, NULL as v3, NULL as v4
      from t2 union all
      select k, NULL as v1, NULL as v2, v3, NULL as v4
      from t3 union all
      select k, NULL as v1, NULL as v2, NULL as v3, v4
      from t4
     ) t
group by k;



  1. SQLalchemy:wijzigingen die niet worden vastgelegd in db

  2. pip freeze geeft verschillende modules uit help('modules')

  3. Mysql-query doorzoek een tekenreeks in alle kolommen van een tabel

  4. Slaapstand Word lid van twee niet-gerelateerde tabellen wanneer beide een samengestelde primaire sleutel hebben