Dùng CASE để chuẩn hóa cặp giá trị: cột nhỏ hơn đặt trước, cột lớn hơn đặt sau, sau đó DISTINCT.
Cú pháp
SELECT DISTINCT
CASE WHEN cot1 < cot2 THEN cot1 ELSE cot2 END AS cot_nho,
CASE WHEN cot1 > cot2 THEN cot1 ELSE cot2 END AS cot_lon
FROM ten_bang;
Ví dụ minh họa
Tạo bảng select_DistinctTwoColumns:
CREATE TABLE select_DistinctTwoColumns (
Id INT NOT NULL AUTO_INCREMENT,
FirstValue CHAR(1), SecondValue CHAR(1), PRIMARY KEY (Id)
);
INSERT INTO select_DistinctTwoColumns (FirstValue, SecondValue) VALUES
('s','t'), ('t','u'), ('u','v'), ('u','t');
Dữ liệu gốc: (s,t), (t,u), (u,v), (u,t) → (t,u) và (u,t) là cùng một cặp.
Truy vấn tổ hợp duy nhất
SELECT DISTINCT
CASE WHEN FirstValue < SecondValue THEN FirstValue ELSE SecondValue END AS FirstColumn,
CASE WHEN FirstValue > SecondValue THEN FirstValue ELSE SecondValue END AS SecondColumn
FROM select_DistinctTwoColumns;
Kết quả: 3 cặp duy nhất
+-------------+--------------+
| FirstColumn | SecondColumn |
+-------------+--------------+
| s | t |
| t | u |
| u | v |
+-------------+--------------+
Cách thay thế (MySQL 8.0+): Dùng LEAST() và GREATEST():
SELECT DISTINCT LEAST(FirstValue, SecondValue) AS FirstColumn,
GREATEST(FirstValue, SecondValue) AS SecondColumn
FROM select_DistinctTwoColumns;
Ngắn gọn, dễ đọc hơn.