การรวมผลลัพธ์จากหลายตารางและจำกัดจำนวนรวม
ใช้ UNION ALL รวมผลลัพธ์จากหลายตาราง แล้วค่อย LIMIT ท้ายสุด
ตัวอย่าง: 3 ตาราง ต้องการ 2 แถวรวมทั้งหมด
CREATE TABLE demo3 (value INT);
CREATE TABLE demo4 (value1 INT);
CREATE TABLE demo5 (value2 INT);
-- ข้อมูลตัวอย่าง
INSERT INTO demo3 VALUES (10), (20), (30);
INSERT INTO demo4 VALUES (40), (10), (60);
INSERT INTO demo5 VALUES (100), (60), (50);
-- Query: เอา 2 แถวแรกจากแต่ละตาราง (ORDER BY DESC) แล้วรวม แล้ว LIMIT 2
SELECT tbl.* FROM (
(SELECT * FROM demo3 ORDER BY value DESC LIMIT 2)
UNION ALL
(SELECT * FROM demo4 ORDER BY value1 DESC LIMIT 2)
UNION ALL
(SELECT * FROM demo5 ORDER BY value2 DESC LIMIT 2)
) tbl
LIMIT 2;
ผลลัพธ์
| value |
|---|
| 30 |
| 20 |
คำอธิบาย: Subquery แต่ละอันเรียงและจำกัด 2 แถว UNION ALL รวมกันได้ 6 แถว LIMIT 2 ภายนอกเอา 2 แถวแรกของผลรวม (ซึ่งมาจาก demo3 เพราะอยู่บนสุด)
หมายเหตุ: ใช้ UNION ALL (ไม่ DISTINCT) เพื่อประสิทธิภาพ และรองรับ Duplicate