Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL tạo tổ hợp giá trị khác nhau từ các cột trong bảng

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.