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

MySQL: ใช้ UNION SELECT ร่วมกับ IN clause ในคำสั่งเดียว

การรวม UNION และ IN() เพื่อกรองข้อมูลจากหลายตาราง

ตัวอย่างนี้สาธิตการใช้ UNION รวมข้อมูลจากสองตาราง แล้วกรองด้วย IN() บนชุดผลลัพธ์ที่รวมแล้ว

สร้างตารางแรกและข้อมูล

mysql> create table DemoTable1 (
    -> StudentId int,
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (1.24 sec)

mysql> insert into DemoTable1 values(210, 'Adam');

สร้างตารางที่สองและข้อมูล

mysql> create table DemoTable2 (
    -> StudentId int,
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (0.69 sec)

mysql> insert into DemoTable2 values(100, 'Chris');

คำสั่ง UNION + IN

mysql> select StudentName from
    -> (
    ->   select StudentId, StudentName from DemoTable1
    ->   UNION
    ->   select StudentId, StudentName from DemoTable2
    -> ) tbl
    -> where StudentId IN (210, 100);

ผลลัพธ์

+-------------+
| StudentName |
+-------------+
| Adam        |
| Chris       |
+-------------+

อธิบายโครงสร้าง

  • Subquery (derived table) tbl รวมข้อมูลจากทั้งสองตารางด้วย UNION (ลบซ้ำอัตโนมัติ)
  • Outer query กรองด้วย WHERE StudentId IN (...)
  • เลือกเฉพาะ StudentName ตามที่ต้องการ

UNION vs UNION ALL

  • UNION — ลบแถวซ้ำ (distinct) ต้อง sort/unique → ช้ากว่า
  • UNION ALL — เก็บทุกแถว รวมซ้ำ → เร็วกว่า ใช้เมื่อแน่ใจว่าไม่ซ้ำหรือยอมรับซ้ำ

การเพิ่ม Index เพื่อประสิทธิภาพ

หากตารางใหญ่ ควรสร้าง index บน StudentId ในทั้งสองตาราง เพื่อให้ IN() และ UNION ทำงานเร็วขึ้น

กรณีซับซ้อน: UNION หลายตาราง + เงื่อนไขต่างกัน

SELECT name FROM (
  SELECT id, name FROM table1 WHERE status = 'active'
  UNION ALL
  SELECT id, name FROM table2 WHERE type = 'premium'
  UNION ALL
  SELECT id, name FROM table3 WHERE verified = 1
) combined
WHERE id IN (101, 202, 303);