Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Đếm tổng số dòng từ nhiều bảng trong MySQL

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 ALL giữ tất cả kết quả (bao gồm trùng lặp)
  • UNION loạ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.