Giới thiệu
Để lấy tối đa N hàng từ kết quả gộp của nhiều bảng, dùng UNION ALL gộp các truy vấn con (mỗi truy vấn con đã LIMIT), sau đó bọc ngoài và LIMIT lần nữa.
Ví dụ: Lấy 2 hàng lớn nhất từ 3 bảng
3 bảng demo3, demo4, demo5 mỗi bảng 3 hàng
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;
Kết quả (giả sử giá trị lớn nhất ở demo3):
+-------+
| value |
+-------+
| 30 |
| 20 |
+-------+
Giải thích: Mỗi subquery lấy top 2 của bảng đó. UNION ALL gộp (giữ trùng lặp). Truy vấn ngoài lấy top 2 của tổng hợp. Lưu ý: Các cột của các SELECT trong UNION phải tương ứng về số lượng và kiểu dữ liệu (tên cột lấy từ SELECT đầu tiên).