452

为什么以下不起作用?

SELECT name FROM (SELECT name FROM agentinformation)

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

SELECT name FROM agentinformation

内部 select 语句不会创建外部 SELECT 语句然后查询的结果集吗?

4

2 回答 2

781

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

SELECT name FROM (SELECT name FROM agentinformation) a  

或更明确地说

SELECT a.name FROM (SELECT name FROM agentinformation) a  
于 2011-01-07T20:29:24.893 回答
60

Joe Stefanelli 提供的答案已经是正确的。

SELECT name FROM (SELECT name FROM agentinformation) as a  

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

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

  • WHERE 表达式 [NOT] IN(子查询)
  • WHERE 表达式 compare_operator [ANY | ALL](子查询)
  • WHERE [NOT] EXISTS(子查询)

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

嵌套子查询的更多示例

  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 检查子查询返回的行是否存在。
于 2016-09-16T17:31:32.830 回答