Cách làm: UNION ALL + SUM
SELECT SUM(tbl.EachTableCount)
FROM (
SELECT COUNT(*) AS EachTableCount FROM bang1
UNION ALL
SELECT COUNT(*) AS EachTableCount FROM bang2
) tbl;
Tại sao dùng UNION ALL?
UNION ALLgiữ tất cả kết quả (bao gồm trùng lặp)UNIONloại bỏ trùng lặp → sai kết quả khi 2 bảng có cùng số dòng- Hiệu năng tốt hơn UNION
Ví dụ với 2 bảng
-- Bảng userdemo: 4 dòng
-- Bảng wheredemo: 5 dòng
mysql> SELECT SUM(tbl.EachTableCount)
-> FROM (
-> SELECT COUNT(*) AS EachTableCount FROM userdemo
-> UNION ALL
-> SELECT COUNT(*) AS EachTableCount FROM wheredemo
-> ) tbl;
+-------------------------+ | sum(tbl.EachTableCount) | +-------------------------+ | 9 | +-------------------------+
Mở rộng cho N bảng
SELECT SUM(cnt) FROM (
SELECT COUNT(*) AS cnt FROM bang1
UNION ALL SELECT COUNT(*) FROM bang2
UNION ALL SELECT COUNT(*) FROM bang3
-- thêm UNION ALL cho các bảng khác
) AS t;
Lưu ý: Cách này quét toàn bộ từng bảng. Với bảng lớn, hãy cân nhắc dùng trigger/maintain counter table.