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

เลือกแถวที่คอลัมน์สองคอลัมน์มีค่าไม่เท่ากันใน MySQL

เปรียบเทียบคอลัมน์สองคอลัมน์ รวมถึงจัดการ NULL

ใช้ != (หรือ <>) พร้อมเงื่อนไขตรวจสอบ NULL เนื่องจาก NULL != NULL เป็น UNKNOWN ไม่ใช่ TRUE

ไวยากรณ์

SELECT * FROM yourTableName 
WHERE col1 != col2 
   OR (col1 IS NULL AND col2 IS NOT NULL) 
   OR (col2 IS NULL AND col1 IS NOT NULL);

ตัวอย่างการใช้งาน

สร้างตาราง:

CREATE TABLE selectTwoColumns (
    Id INT NOT NULL AUTO_INCREMENT,
    FirstNumber INT,
    SecondNumber INT,
    PRIMARY KEY(Id)
);

เพิ่มข้อมูล (รวม NULL):

INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(10, 20);
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(30, 40);
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(20, 20);  -- เท่ากัน
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(50, 60);
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(50, 50);  -- เท่ากัน
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(70, NULL); -- NULL

ค้นหาแถวที่ค่าต่างกัน:

SELECT * FROM selectTwoColumns 
WHERE FirstNumber != SecondNumber 
   OR (FirstNumber IS NULL AND SecondNumber IS NOT NULL) 
   OR (SecondNumber IS NULL AND FirstNumber IS NOT NULL);

ผลลัพธ์:

+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1  | 10          | 20           |
| 2  | 30          | 40           |
| 4  | 50          | 60           |
| 6  | 70          | NULL         |
+----+-------------+--------------+

วิธีที่สั้นกว่า (MySQL)

MySQL มี operator <=> (NULL-safe equal) - คืน TRUE/FALSE แม้จะเป็น NULL:

-- ค่าต่างกัน (รวม NULL)
SELECT * FROM selectTwoColumns WHERE NOT (FirstNumber <=> SecondNumber);

-- ค่าเท่ากัน (รวม NULL)
SELECT * FROM selectTwoColumns WHERE FirstNumber <=> SecondNumber;

ตารางความจริงของ <=> (Null-safe equal)

col1col2col1 <=> col2col1 = col2
1010TRUE (1)TRUE (1)
1020FALSE (0)FALSE (0)
NULLNULLTRUE (1)NULL (UNKNOWN)
NULL10FALSE (0)NULL (UNKNOWN)

สรุป

  • ใช้ NOT (col1 <=> col2) สำหรับ "ไม่เท่ากัน" รวม NULL (สั้นและชัดเจน)
  • ใช้ col1 != col2 OR ... สำหรับความเข้ากันได้กับฐานข้อมูลอื่น
  • จำไว้: NULL = NULL เป็น UNKNOWN ไม่ใช่ TRUE