如何在 MySQL 的 WHERE 子句中使用實際行數 (COUNT(*)),而無需將相同的查詢作為子查詢編寫?


藉助 WHERE 子句實現此目的。

語法如下:

SELECT yourColumnName1,yourColumnName2,...N FROM yourTableName
WHERE
(
   SELECT COUNT(*) FROM yourTableName
)=2;

為了理解這個概念,讓我們建立一個表。建立表的查詢如下:

mysql> create table CountWithSubqueryDemo
   - > (
   - > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
   - > EmployeeName varchar(20)
   - > );
Query OK, 0 rows affected (2.09 sec)

使用 INSERT 命令在表中插入一些記錄。

查詢如下:

mysql> insert into CountWithSubqueryDemo(EmployeeName) values('John');
Query OK, 1 row affected (0.54 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.36 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Carol');
Query OK, 1 row affected (0.23 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('');
Query OK, 1 row affected (0.31 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Bob');
Query OK, 1 row affected (1.24 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.30 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values('James');
Query OK, 1 row affected (0.26 sec)

使用 SELECT 語句顯示錶中的所有記錄。

查詢如下:

mysql> select *from CountWithSubqueryDemo;

以下是輸出:

+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | John         |
|  2 | NULL         |
|  3 | Carol        |
|  4 |              |
|  5 | Bob          |
|  6 | NULL         |
|  7 | Sam          |
|  8 | Mike         |
|  9 | James        |
+----+--------------+
9 rows in set (0.19 sec)

以下是如何在 WHERE 子句中使用實際行數的方法:

mysql> select Id,EmployeeName from CountWithSubqueryDemo
   - > where
   - > (
   - > select count(*) from CountWithSubqueryDemo
   - > )=2;
Empty set (0.03 sec)

在上面的查詢中,我們得到空集,因為它只在表只有兩條記錄時返回該行。因此,讓我們從表中刪除所有記錄,並在表中插入 2 條記錄。

查詢如下:

mysql> truncate table CountWithSubqueryDemo;
Query OK, 0 rows affected (1.95 sec)

使用 INSERT 命令在表中插入一些記錄。

查詢如下:

mysql> insert into CountWithSubqueryDemo(EmployeeName) values('James');
Query OK, 1 row affected (0.15 sec)
mysql> insert into CountWithSubqueryDemo(EmployeeName) values(NULL);
Query OK, 1 row affected (0.46 sec)

使用 SELECT 語句顯示錶中的所有記錄。

查詢如下:

mysql> select *from CountWithSubqueryDemo;

以下是輸出:

+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | James        |
|  2 | NULL         |
+----+--------------+
2 rows in set (0.00 sec)

現在,以下是 WHERE 子句中行數的查詢:

mysql> select Id,EmployeeName from CountWithSubqueryDemo
   - > where
   - > (
   - > select count(*) from CountWithSubqueryDemo
   - > )=2;

以下是輸出:

+----+--------------+
| Id | EmployeeName |
+----+--------------+
|  1 | James        |
|  2 | NULL         |
+----+--------------+
2 rows in set (0.00 sec)

更新於:2019年7月30日

2K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.