ใช้ CASE จัดลำดับค่าใน 2 คอลัมน์ ให้ค่าน้อยอยู่หน้า ค่ามากอยู่หลัง แล้ว DISTINCT กรองค่าซ้ำ
ตัวอย่างการใช้งาน
สร้างตาราง select_DistinctTwoColumns:
mysql> CREATE TABLE select_DistinctTwoColumns (
-> Id INT NOT NULL AUTO_INCREMENT,
-> FirstValue CHAR(1),
-> SecondValue CHAR(1),
-> PRIMARY KEY(Id)
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO select_DistinctTwoColumns(FirstValue, SecondValue) VALUES('s','t'),('t','u'),('u','v'),('u','t');
ข้อมูลเดิม
+----+------------+-------------+ | Id | FirstValue | SecondValue | +----+------------+-------------+ | 1 | s | t | | 2 | t | u | | 3 | u | v | | 4 | u | t | +----+------------+-------------+
คู่ (s,t) และ (u,t) ถือว่าเป็นคู่เดียวกัน (เรียงลำดับไม่สำคัญ)
คำสั่งเลือกคู่ที่ไม่ซ้ำ (จัดลำดับค่าในคู่)
mysql> 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;
ผลลัพธ์ (3 คู่ไม่ซ้ำ)
+-------------+--------------+ | FirstColumn | SecondColumn | +-------------+--------------+ | s | t | | t | u | | u | v | +-------------+--------------+
คำอธิบาย: CASE จัดให้ค่าน้อยอยู่คอลัมน์แรก ค่ามากอยู่คอลัมน์ที่สอง ทำให้ (s,t) และ (t,s) กลายเป็นคู่เดียวกัน