ใช้ Subquery เพื่อหาความต่างระหว่าง 2 คำสั่ง SELECT ใน MySQL
รูปแบบไวยากรณ์
SELECT * FROM yourTableName WHERE yourColumnName NOT IN (SELECT yourColumnName FROM yourTableName WHERE yourCondition);
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> CREATE TABLE DifferenceSelectDemo ( Id INT NOT NULL AUTO_INCREMENT, UserId INT, UserValue INT, PRIMARY KEY(Id) ); Query OK, 0 rows affected (0.87 sec)
เพิ่มข้อมูล:
mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(10,10); Query OK, 1 row affected (0.24 sec) mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(10,20); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(20,30); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(20,20); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(30,40); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DifferenceSelectDemo(UserId,UserValue) VALUES(30,20); Query OK, 1 row affected (0.15 sec)
แสดงข้อมูล:
+----+--------+-----------+ | Id | UserId | UserValue | +----+--------+-----------+ | 1 | 10 | 10 | | 2 | 10 | 20 | | 3 | 20 | 30 | | 4 | 20 | 20 | | 5 | 30 | 40 | | 6 | 30 | 20 | +----+--------+-----------+ 6 rows in set (0.02 sec)
คำสั่งหาความต่าง: เลือกแถวที่ UserValue ไม่อยู่ใน Subquery (Id=1 มีค่า 10):
mysql> SELECT * FROM DifferenceSelectDemo WHERE UserValue NOT IN (SELECT UserValue FROM DifferenceSelectDemo WHERE Id=1);
ผลลัพธ์ (ไม่รวมค่า 10):
+----+--------+-----------+ | Id | UserId | UserValue | +----+--------+-----------+ | 2 | 10 | 20 | | 3 | 20 | 30 | | 4 | 20 | 20 | | 5 | 30 | 40 | | 6 | 30 | 20 | +----+--------+-----------+ 5 rows in set (0.09 sec)