Rõ ràng, bạn có các giá trị trùng lặp cho cả hai cột tham gia. Thay vì sản phẩm Descartes, một [INNER] JOIN
sẽ tạo ra điều này, bạn muốn mỗi hàng chỉ được sử dụng một lần . Bạn có thể đạt được điều này bằng cách thêm một số hàng (rn
) mỗi bản sao và tham gia trên rn
ngoài ra.
Mỗi bảng có thể có nhiều hơn hoặc ít hơn các lỗi cho cùng một giá trị so với bảng khác trừ khi bạn có các hạn chế bổ sung tại chỗ (như ràng buộc FK) - nhưng không có gì trong câu hỏi của bạn. Để giữ tất cả các hàng một sẽ sử dụng FULL [OUTER] JOIN
. Nhưng bạn muốn giữ lại 10000 bản ghi trong kết quả, đó là bản ghi của table2
. Vì vậy, nó phải là LEFT [OUTER] JOIN
trên table1
(với 40 hàng) - và loại trừ các hàng thừa có thể có khỏi table1
.
SELECT t1."LocationArea", t2."Location"
FROM (
SELECT "Location"
, row_number() OVER (PARTITION BY "Location") AS rn
FROM table2
) t2
LEFT JOIN (
SELECT "LocationArea"
, row_number() OVER (PARTITION BY "LocationArea") AS rn
FROM table1
) t1 ON t1."LocationArea" = t2."Location"
AND t1.rn = t2.rn;
Hoạt động cho Postgres hoặc SQL Server. MySQL không hỗ trợ các hàm cửa sổ, bạn sẽ cần một hàm thay thế:
- SQL CHỌN mục nhập cuối cùng mà không giới hạn
Nói rõ hơn:LEFT JOIN
chỉ là viết tắt của LEFT OUTER JOIN
, vì vậy bạn đã sử dụng một phép nối bên ngoài. Tuyên bố của bạn là một sự hiểu lầm :
Tôi đang sử dụng các báo cáo ZOHO không hỗ trợ kết nối bên ngoài.