为什么下面的不能工作?

SELECT name FROM (SELECT name FROM agentinformation)

我猜我对SQL的理解是错误的,因为我本以为这将返回相同的东西

SELECT name FROM agentinformation

内部select语句创建的结果集不是由外部select语句查询的吗?


当前回答

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

SELECT name FROM (SELECT name FROM agentinformation) as a  

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

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

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

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

嵌套子查询的更多示例。

IN / NOT IN -该操作符在内部查询执行后接受内部查询的输出,可以是零或多个值,并将其发送给外部查询。外部查询然后获取所有匹配的[IN操作符]或不匹配的[NOT IN操作符]行。 ANY - [>ANY或ANY操作符接受内部查询生成的值列表,并获取所有大于列表最小值的值。的

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

ALL - [>ALL或ALL操作符获取内部查询生成的值列表,并获取所有大于列表最大值的值。的

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

EXISTS - EXISTS关键字产生一个布尔值[TRUE/FALSE]。EXISTS检查子查询返回的行是否存在。

其他回答

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

SELECT name FROM (SELECT name FROM agentinformation) a  

或者更明确地说

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

试试这个

'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

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

SELECT name FROM (SELECT name FROM agentinformation) as a  

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

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

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

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

嵌套子查询的更多示例。

IN / NOT IN -该操作符在内部查询执行后接受内部查询的输出,可以是零或多个值,并将其发送给外部查询。外部查询然后获取所有匹配的[IN操作符]或不匹配的[NOT IN操作符]行。 ANY - [>ANY或ANY操作符接受内部查询生成的值列表,并获取所有大于列表最小值的值。的

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

ALL - [>ALL或ALL操作符获取内部查询生成的值列表,并获取所有大于列表最大值的值。的

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

EXISTS - EXISTS关键字产生一个布尔值[TRUE/FALSE]。EXISTS检查子查询返回的行是否存在。