也許這不會回答你的問題,但會幫助你瞭解MySQL的ALL
ALL
關鍵字返回的數據,如果在外部查詢中給定的行滿足由返回的所有行值的條件子查詢:
下面是一個例子:
mysql> SELECT * FROM t1;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM t2;
+------+
| j |
+------+
| 2 |
| 4 |
| 6 |
+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM t1 WHERE i = ALL (SELECT j FROM t2);
Empty set (0.00 sec)
這裏空集,因爲返回MySQL將t1表中的給定值與表t2中的所有值進行比較。如果t1的值等於子查詢返回的所有值,則它將顯示爲輸出。
mysql> SELECT * FROM t1 WHERE i <> ALL (SELECT j FROM t2);
+------+
| i |
+------+
| 1 |
| 3 |
| 5 |
+------+
3 rows in set (0.00 sec)
這裏顯示了t1表中的所有值,它們完全不等於子查詢返回的值。
此外,<>ALL
是功能上等同於NOT IN
和=ANY
在功能上等同於IN
mysql> SELECT * FROM t1 WHERE i = ALL (SELECT j FROM t2 WHERE j = 2);
+------+
| i |
+------+
| 2 |
+------+
1 row in set (0.12 sec)
這返回2作爲輸出,因爲2(來自表t1)與由子所產生的唯一的輸出相匹配查詢。
https://dev.mysql.com/doc/refman/5.7/en/all-subqueries.html – user2864740