Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pełne łączenie wielu tabel w tych samych kolumnach

Jest kilka sposobów, ale myślę, że najbardziej popularny jest ten:

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;

Jeśli masz osobną tabelę wszystkich k wartości, możesz użyć tego zamiast allk podzapytanie.

Łatwiejszy sposób na napisanie full outer join zapytanie polega na użyciu 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 trzecia metoda to 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oświadczenie się skończyło. Maksymalna rekurencja 100 została wyczerpana przed zakończeniem instrukcji

  2. Jak korzystać z GOTO w SQL Server

  3. Uzyskaj informacje o kolumnie dla tabeli lub widoku w programie SQL Server (T-SQL:sp_columns)

  4. Nie można połączyć pyODBC z SQL Server 2008 Express R2

  5. Unpivot z nazwą kolumny