Để đếm số dòng kết quả của một truy vấn UNION trong MySQL, bạn sử dụng truy vấn con (subquery) như sau:
SELECT COUNT(*) FROM ( SELECT yourColumnName1 FROM yourTableName1 UNION SELECT yourColumnName1 FROM yourTableName2 ) anyVariableName;
Ví dụ minh họa
Trước tiên, tạo hai bảng và chèn dữ liệu mẫu:
mysql> CREATE TABLE union_Table1 (UserId INT); Query OK, 0 rows affected (0.47 sec) mysql> INSERT INTO union_Table1 VALUES (1), (10), (20); Query OK, 3 rows affected (0.18 sec) mysql> CREATE TABLE union_Table2 (UserId INT); Query OK, 0 rows affected (0.69 sec) mysql> INSERT INTO union_Table2 VALUES (1), (30), (50); Query OK, 3 rows affected (0.12 sec)
Kiểm tra dữ liệu:
mysql> SELECT * FROM union_Table1; +--------+ | UserId | +--------+ | 1 | | 10 | | 20 | +--------+ mysql> SELECT * FROM union_Table2; +--------+ | UserId | +--------+ | 1 | | 30 | | 50 | +--------+
Lưu ý: UNION mặc định loại bỏ các bản ghi trùng lặp. Giá trị 1 xuất hiện ở cả hai bảng nhưng chỉ được tính một lần.
Truy vấn đếm
mysql> SELECT COUNT(*) AS UnionCount FROM ( SELECT DISTINCT UserId FROM union_Table1 UNION SELECT DISTINCT UserId FROM union_Table2 ) tbl1;
Kết quả:
+------------+ | UnionCount | +------------+ | 5 | +------------+ 1 row in set (0.00 sec)
Kết quả là 5 vì có 5 giá trị duy nhất: 1, 10, 20, 30, 50.
Lưu ý quan trọng
- Sử dụng
UNION ALLnếu muốn giữ lại các bản ghi trùng lặp. - Truy vấn con bắt buộc phải có alias (ví dụ
tbl1). - Các cột trong các truy vấn
UNIONphải cùng kiểu dữ liệu và thứ tự.