Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Gabung penuh beberapa tabel pada kolom yang sama

Ada beberapa cara, tapi menurut saya berikut ini yang paling populer:

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;

Jika Anda memiliki tabel terpisah dari semua k nilai, Anda dapat menggunakannya sebagai ganti allk subkueri.

Cara yang lebih mudah untuk menulis full outer join kueri adalah menggunakan 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);

Dan metode ketiga adalah 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilkan Opsi Konfigurasi Server Tingkat Lanjut di SQL Server (T-SQL)

  2. String_agg untuk SQL Server sebelum 2017

  3. Bagaimana cara menulis kueri SQL untuk rentang tanggal dan waktu tertentu menggunakan SQL Server 2008?

  4. Apakah kueri SELECT selalu mengembalikan baris dalam urutan yang sama? Tabel dengan indeks berkerumun

  5. group_concat di SQL Server 2008