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

Cách đếm kết quả của truy vấn UNION trong MySQL


Để đế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 ALL nế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 UNION phải cùng kiểu dữ liệu và thứ tự.