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

วิธีรวมตารางสองตารางด้วย UNION ALL พร้อมเงื่อนไขใน MySQL

รวมผลลัพธ์จากสองตารางด้วย UNION ALL และกรองด้วย WHERE

UNION ALL รวมผลลัพธ์จากหลาย SELECT เข้าด้วยกัน (เก็บแถวซ้ำไว้) ต่างจาก UNION ที่ลบแถวซ้ำ ใช้ WHERE ในแต่ละ SELECT เพื่อกรองข้อมูลก่อนรวม

ตัวอย่างสร้างตาราง 2 ตาราง

CREATE TABLE DemoTable1 (Id INT, FirstName VARCHAR(20));
CREATE TABLE DemoTable2 (Id INT, FirstName VARCHAR(20));

INSERT INTO DemoTable1 VALUES (10, 'John'), (20, 'Carol');
INSERT INTO DemoTable2 VALUES (20, 'David'), (40, 'Chris');

ข้อมูลตาราง 1

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 10   | John      |
| 20   | Carol     |
+------+-----------+

ข้อมูลตาราง 2

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | David     |
| 40   | Chris     |
+------+-----------+

คำสั่งรวมตารางทั้งสอง กรอง Id = 20 ทั้งคู่

SELECT * FROM DemoTable1 WHERE Id = 20
UNION ALL
SELECT * FROM DemoTable2 WHERE Id = 20;

ผลลัพธ์ (เก็บแถวซ้ำ Id=20 ไว้ทั้งคู่)

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | Carol     |
| 20   | David     |
+------+-----------+

คำอธิบาย:

  • จำนวนคอลัมน์และลำดับคอลัมน์ในทุก SELECT ต้องตรงกัน
  • UNION ALL เร็วกว่า UNION เพราะไม่ต้องตรวจสอบ/ลบแถวซ้ำ
  • ใช้ ORDER BY ได้เฉพาะท้ายคำสั่งสุดท้าย (ครอบทั้งชุดผลลัพธ์)

กรณีต้องการลบแถวซ้ำ: ใช้ UNION

SELECT * FROM DemoTable1 WHERE Id = 20
UNION
SELECT * FROM DemoTable2 WHERE Id = 20;

จะได้แถวเดียว (Carol หรือ David ขึ้นกับการจัดเรียงภายใน)

Best Practice: ระบุคอลัมน์ชัดเจน (SELECT Id, FirstName) แทน SELECT * เพื่อป้องกันปัญหาโครงสร้างตารางเปลี่ยน