SQL Server 中的嵌套 select 语句

Nested select statement in SQL Server

提问人:Brennan Vincent 提问时间:1/8/2011 最后编辑:NoDataDumpNoContributionBrennan Vincent 更新时间:8/2/2022 访问量:1005776

问:

为什么以下方法不起作用?

SELECT name FROM (SELECT name FROM agentinformation)

我想我对 SQL 的理解是错误的,因为我认为这会返回与

SELECT name FROM agentinformation

内部 select 语句是否不会创建一个结果集,然后外部 SELECT 语句会查询该结果集?

SQL Server 嵌套 子查询

评论


答:

857赞 Joe Stefanelli 1/8/2011 #1

您需要为子查询设置别名。

SELECT name FROM (SELECT name FROM agentinformation) a  

或者更明确地说

SELECT a.name FROM (SELECT name FROM agentinformation) a  

评论

102赞 Doug Chamberlain 1/8/2011
确保你的别名也有些冗长!我喜欢当我开始与 t1,t2,t3,t4,t5,t6 一起工作时
5赞 Colonel Panic 11/16/2012
子句将用于外部查询的哪个位置?where
3赞 Joe Stefanelli 11/16/2012
@ColonelPanic:外部查询的 WHERE 子句将在最后附加。
3赞 Kjetil S. 12/12/2018
Oracle 接受第一个不带别名的 Oracle。select
74赞 Somnath Muluk 9/17/2016 #2

乔·斯特凡内利(Joe Stefanelli)提供的答案已经是正确的。

SELECT name FROM (SELECT name FROM agentinformation) as a  

我们需要为子查询创建一个别名,因为查询需要一个表对象,我们将通过为子查询创建别名来获得该表对象。从概念上讲,子查询结果被替换到外部查询中。由于我们需要在外部查询中有一个表对象,因此我们需要为内部查询创建一个别名。

包含子查询的语句通常采用以下形式之一:

  • WHERE 表达式 [NOT] IN (子查询)
  • WHERE 表达式comparison_operator [ANY |ALL](子查询)
  • 其中 [NOT] 存在(子查询)

检查更多子查询规则和子查询类型

嵌套子查询的更多示例

  1. IN / NOT IN – 此运算符在执行内部查询后获取内部查询的输出,该输出可以是零个或多个值,并将其发送到外部查询。然后,外部查询提取所有匹配的 [IN 运算符] 或不匹配的 [NOT IN 运算符] 行。

  2. ANY – [>ANY 或 ANY 运算符获取内部查询生成的值列表,并提取大于列表最小值的所有值。这

例如>ANY(100,200,300),ANY 运算符将获取所有大于 100 的值。

  1. ALL – [>ALL 或 ALL 运算符获取内部查询生成的值列表,并提取大于列表最大值的所有值。这

例如,>ALL(100,200,300),ALL 运算符将获取所有大于 300 的值。

  1. EXISTS – EXISTS 关键字生成布尔值 [TRUE/FALSE]。此 EXISTS 检查子查询返回的行是否存在。
-1赞 MUHINDO 8/2/2022 #3

试试这个

'select *,(SELECT count(id) FROM products WHERE user_id = users.id) as products_count from users ORDER BY products_count DESC, ID DESC LIMIT 200