sql >> Database teknologi >  >> RDS >> Sqlserver

Fuldt sammenføj flere tabeller på samme kolonner

Der er flere måder, men jeg tror, ​​at følgende er den mest populære:

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;
 

Hvis du har en separat tabel over alle k værdier, kan du bruge det i stedet for allk underforespørgsel.

En nemmere måde at skrive din full outer join forespørgslen skal bruge 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);

Og den tredje metode er union all /group by metode:

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. Hvordan fungerer FULLTEXT INDEXS på flere kolonner?

  2. Sådan opdaterer du 3 tabelkolonner, mens kun én kolonne er synlig på siden

  3. Hvordan administrerer du SQL-forespørgsler

  4. Brug af .pgpass fra Apache libphp5.so