1

我遇到了这个 SQL 语句的问题:

SELECT linkstable.date, (linkstable.count - x.count) 
FROM (SELECT .....) AS linkstable 
INNER JOIN linkstable AS x 
  ON linkstable.date = x.date+1 

它告诉我,虽然(SQL 错误 1146)显然存在该选择查询的别名,但无法找到链接表。谁能告诉我如何绕过这个错误?

4

2 回答 2

5

您不能为别名设置别名。如果要将表连接到自身,请重复选择:

SELECT linkstable.date, (linkstable.count - x.count) 
FROM (SELECT .....) AS linkstable 
INNER JOIN (SELECT .....) AS x ON linkstable.date = x.date+1

如果内部选择太麻烦或遇到性能问题,请将其结果插入临时表并在主查询中使用。

于 2013-08-06T18:41:01.200 回答
4

您不能FROM像这样在子句中引用子查询的别名。但是,如果您的数据库支持公用表表达式,则可以使用该WITH子句来完成同样的事情:

WITH linkstable as (SELECT ...)
SELECT linkstable.date, (linkstable.count - x.count) 
FROM linkstable 
INNER JOIN linkstable AS x 
  ON linkstable.date = x.date+1 
于 2013-08-06T19:06:41.423 回答