Tôi không biết liệu tôi có hiểu vấn đề của bạn hay không, nhưng tại sao bạn lại sử dụng THAM GIA TRÁI? Câu chuyện nghe giống như MỘT THAM GIA BÊN TRONG. Ở đây không có gì gọi là ĐOÀN KẾT.
[Chỉnh sửa] OK, tôi nghĩ tôi thấy những gì bạn muốn bây giờ. Tôi chưa bao giờ thử những gì tôi sắp đề xuất và hơn thế nữa, một số DB chưa hỗ trợ nó (chưa), nhưng tôi nghĩ bạn muốn có một chức năng cửa sổ.
WITH Y2 AS (SELECT Y.*, ROW_NUMBER() OVER (PARTITION BY A) AS YROW FROM Y),
Z2 AS (SELECT Z.*, ROW_NUMBER() OVER (PARTITION BY A) AS ZROW FROM Z)
SELECT COALESCE(Y2.A,Z2.A) AS A, Y2.C, Y2.D, Z2.E, Z2.F, Z2.G
FROM Y2 FULL OUTER JOIN Z2 ON Y2.A=Z2.A AND YROW=ZROW;
Ý tưởng là in danh sách trong càng ít hàng càng tốt, phải không? Vì vậy, nếu A1 có 10 mục nhập trong Y và 7 mục nhập trong Z, thì chúng tôi nhận được 10 hàng với 3 có NULL cho các trường Z. Điều này hoạt động trong Postgres. Tôi không tin rằng cú pháp này có sẵn trong MySQL.
Y:
a | d | c
---+---+----
1 | 1 | -1
1 | 2 | -1
2 | 0 | -1
Z:
a | f | g | e
---+---+---+---
1 | 9 | 9 | 0
2 | 1 | 1 | 0
3 | 0 | 1 | 0
Đầu ra của câu lệnh trên:
a | c | d | e | f | g
---+----+---+---+---+---
1 | -1 | 1 | 0 | 9 | 9
1 | -1 | 2 | | |
2 | -1 | 0 | 0 | 1 | 1
3 | | | 0 | 0 | 1