SQL INNER JOIN没有看到表别名

时间:2013-08-06 18:38:45

标签: sql

我遇到了这条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)显然有一个别选择查询。任何人都可以告诉我,我该如何绕过这个错误?

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

您无法在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