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

Dùng COUNT(*) trong WHERE mà không cần subquery lồng nhau trong MySQL

Có thể dùng subquery trong mệnh đề WHERE để so sánh tổng số dòng của bảng với một giá trị.

Cú pháp:

SELECT col1, col2 FROM yourTableName WHERE (SELECT COUNT(*) FROM yourTableName) = 2;

Tạo bảng:

mysql> CREATE TABLE CountWithSubqueryDemo (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, EmployeeName VARCHAR(20));

Chèn 9 dòng (có NULL và rỗng):

+----+--------------+
| Id | EmployeeName |
+----+--------------+
| 1  | John         |
| 2  | NULL         |
| 3  | Carol        |
| 4  |              |
| 5  | Bob          |
| 6  | NULL         |
| 7  | Sam          |
| 8  | Mike         |
| 9  | James        |
+----+--------------+

Truy vấn kiểm tra nếu bảng có đúng 2 dòng:

mysql> SELECT Id, EmployeeName FROM CountWithSubqueryDemo WHERE (SELECT COUNT(*) FROM CountWithSubqueryDemo) = 2;

Kết quả: Empty set (vì bảng có 9 dòng).

Xóa dữ liệu và chèn 2 dòng:

mysql> TRUNCATE TABLE CountWithSubqueryDemo;
mysql> INSERT INTO CountWithSubqueryDemo(EmployeeName) VALUES('James'), (NULL);

Chạy lại truy vấn:

+----+--------------+
| Id | EmployeeName |
+----+--------------+
| 1  | James        |
| 2  | NULL         |
+----+--------------+

Lưu ý: Subquery trong WHERE được thực thi cho mỗi dòng, có thể chậm trên bảng lớn. Cân nhắc dùng biến hoặc CTE (MySQL 8.0+).