首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用(操作符)和使用(操作符)的区别

使用(操作符)和使用(操作符)的区别
EN

Stack Overflow用户
提问于 2021-03-29 15:03:06
回答 2查看 49关注 0票数 0

我无法区分何时只使用像=这样的运算符和何时使用= ANY。他们看起来和我很像。例如,这里有两个表,问题是:编写一个查询以显示按字母顺序低于客户名称的销售人员。我的答案是

代码语言:javascript
复制
SELECT * FROM salesman WHERE name < (SELECT cust_name FROM customer);

但正确的答案是

代码语言:javascript
复制
SELECT * FROM salesman WHERE name < ANY (SELECT cust_name FROM customer);

意思是我漏掉了一个。谁能告诉我为什么我错了,什么时候该用,什么时候不用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-29 15:05:54

代码语言:javascript
复制
WHERE name < (SELECT cust_name FROM customer)

如果customer中有多行,则此条件将返回一个错误。为什么?<操作符需要一个标量值。可以使用子查询--但只有在返回一列最多一行的情况下才能使用。

SQL提供了ANYALL来支持这样的构造(以及与ANY相同的SOME )。随着问题的措辞,你想要ALL

代码语言:javascript
复制
WHERE name < ALL (SELECT cust_name FROM customer)

如果您想要的名称小于最大cust_name,可以使用:

代码语言:javascript
复制
WHERE name < ANY (SELECT cust_name FROM customer)

一般来说,ANYALL并不常用。大多数人认为聚合更容易遵循:

代码语言:javascript
复制
WHERE name < (SELECT MIN(cust_name) FROM customer)
WHERE name < (SELECT MAX(cust_name) FROM customer)

customer为空时,有一个细微的区别,但这很少是重要的(或者聚合形式完成了预期的操作)。

票数 2
EN

Stack Overflow用户

发布于 2021-03-29 15:36:53

在您的示例中,您没有充分利用任何/所有用法,因为您的子查询中没有where子句。

参见w3school中的示例以获得更好的使用https://www.w3schools.com/sql/sql_any_all.asp

如果您的子查询中至少有一个为真,则<任何都为真

代码语言:javascript
复制
WHERE name < ANY (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )

只有当您的所有子查询都为真时,<所有才为真

代码语言:javascript
复制
WHERE name < ALL (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66856612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档