Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเลือกคู่ค่าที่ไม่ซ้ำจาก 2 คอลัมน์ใน MySQL

ใช้ 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) กลายเป็นคู่เดียวกัน