Bài toán
Tạo tất cả tổ hợp (Cartesian product) giữa các cột Value1 và Value2 từ cùng một bảng (self-cross join).
Ví dụ
Tạo bảng:
CREATE TABLE DemoTable622 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value1 INT,
Value2 INT
);
INSERT INTO DemoTable622(Value1, Value2) VALUES
(1000, 1000), (2000, 3000);
Truy vấn Cartesian product (self-join 3 lần):
SELECT tbl1.Id, tbl2.Value1, tbl3.Value2
FROM DemoTable622 tbl1,
DemoTable622 tbl2,
DemoTable622 tbl3;
Kết quả (2×2×2 = 8 dòng):
+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 1000 | 1000 |
| 2 | 1000 | 1000 |
| 1 | 2000 | 1000 |
| 2 | 2000 | 1000 |
| 1 | 1000 | 3000 |
| 2 | 1000 | 3000 |
| 1 | 2000 | 3000 |
| 2 | 2000 | 3000 |
+----+--------+--------+
Giải thích
tbl1: Cung cấp Id (2 giá trị).tbl2: Cung cấp Value1 (2 giá trị).tbl3: Cung cấp Value2 (2 giá trị).- Kết quả = tích Descartes của 3 tập hợp.
Cú pháp JOIN chuẩn (khuyên dùng)
SELECT tbl1.Id, tbl2.Value1, tbl3.Value2
FROM DemoTable622 tbl1
CROSS JOIN DemoTable622 tbl2
CROSS JOIN DemoTable622 tbl3;
Ứng dụng thực tế
- Tạo dữ liệu test (test data generation).
- Tổ hợp tham số cho simulation.
- Ma trận quyết định, A/B testing variants.
Cảnh báo
Số dòng kết quả = tích số dòng các bảng → tăng rất nhanh (explosion). Chỉ dùng với bảng nhỏ hoặc có LIMIT.