Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tham gia đầy đủ nhiều bảng trên cùng một cột

Có một số cách, nhưng tôi nghĩ cách sau là phổ biến nhất:

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;

Nếu bạn có một bảng riêng gồm tất cả k , bạn có thể sử dụng giá trị đó thay vì allk truy vấn con.

Một cách dễ dàng hơn để viết full outer join truy vấn là sử dụng 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);

Và phương thức thứ ba là union all / group by phương pháp:

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. Cách khắc phục “Danh sách chọn cho câu lệnh INSERT chứa ít mục hơn danh sách chèn”

  2. Có giải pháp nào để bật FILESTREAM trong phương pháp tiếp cận mã đầu tiên của khung thực thể không

  3. Làm cách nào để xác minh rằng không đồng bộ / chờ đợi của tôi đang sử dụng cổng hoàn tất I / O?

  4. Thống kê gia tăng SQL Server 2014

  5. Cập nhật cùng một dữ liệu từ cùng một bảng