【问题标题】:sql NOT with ALL operatorsql NOT 与 ALL 运算符
【发布时间】:2016-04-01 22:11:00
【问题描述】:

我正在尝试将 NOT 运算符与 ALL 一起使用,但没有进行应有的比较

我遵循了以下内容:

tablex 包含例如:

+------+------+
| id   | name |
+------+------+
|    6 | a    |
|    7 | b    |
|    8 | c    |
|    9 | d    |
|   10 | e    |
+------+------+
5 rows in set (0.04 sec)

并且表格包含:

+------+------+
| id   | name |
+------+------+
|    4 | a    |
|    5 | b    |
|    7 | c    |
|    8 | d    |
+------+------+
4 rows in set (0.03 sec)

我用过:

SELECT id, name FROM tablex WHERE NOT id < ALL (SELECT id FROM tabley);

返回:

+------+------+
| id   | name |
+------+------+
|    6 | a    |
|    7 | b    |
|    8 | c    |
|    9 | d    |
|   10 | e    |
+------+------+
5 rows in set (0.00 sec)

问题是在某些情况下返回的值低于 'tabley' 的值, 使用运算符&gt; 的解决方案非常合乎逻辑,但这是什么意思?

【问题讨论】:

    标签: sql operators


    【解决方案1】:

    如果您使用&lt; 运算符,您似乎想确保id 小于子查询中的最小 id。所以用 SQL 来表达:

    SELECT id, name FROM tablex WHERE NOT id < (SELECT min(id) FROM tabley)
    

    或者,翻转否定:

    SELECT id, name FROM tablex WHERE id >= (SELECT min(id) FROM tabley)
    

    【讨论】:

    • 好的,但是有一个例子: SELECT id, name FROM tablex WHERE NOT id 返回: +------+------+ |编号 |姓名 | +--------+------+ | 8 | c | | 9 | d | | 10 |电子| +-----+------+ 3 行在集合中(0.11 秒) 为什么使用 'ANY' 而不是使用 'ALL'?
    • @nikomaster 也许这可能有助于说明:stackoverflow.com/a/2298576/139010
    • 还有这个:"单词ALL,必须跟在一个比较运算符之后,意思是“如果比较是TRUE,则返回TRUE,对于ALL中的值子查询返回的列。”" dev.mysql.com/doc/refman/5.7/en/all-subqueries.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多