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

Lấy tổ hợp duy nhất từ 2 cột trong MySQL (bỏ qua thứ tự)

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.