sql >> Databáze >  >> RDS >> Sqlserver

Úplné spojení více tabulek ve stejných sloupcích

Existuje několik způsobů, ale podle mě je nejoblíbenější následující:

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;

Pokud máte samostatnou tabulku všech k hodnoty, můžete to použít místo allk dílčí dotaz.

Jednodušší způsob, jak napsat full outer join dotaz je použít coalesce() :

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);

A třetí metodou je union all /group by metoda:

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. Jak ladit překročení časového limitu čekání na zámek na MySQL?

  2. Laravel Migration Error:Chyba syntaxe nebo narušení přístupu:1071 Zadaný klíč byl příliš dlouhý; maximální délka klíče je 767 bajtů

  3. JPA GenerationType.AUTO nebere v úvahu sloupec s automatickým přírůstkem

  4. Jak zjistit první a poslední datum aktuálního roku?