每个派生表必须有自己的别名 - 何时是派生表?

时间:2016-04-01 14:46:12

标签: mysql sql

首先,请注意,我知道其他线索有类似的问题,但它们并没有帮助我理解。相反,我现在有时会遇到分配别名的问题,如下所述。

所以我经常得到错误消息,然后开始给那些我认为是衍生表格的子查询提供别名,但有时这样做,我现在得到消息&#39 ;您的SQL语法错误'相反,在删除' AS ...'声明,一切都运行良好。 所以我真的想弄清楚什么时候确实是派生表,因此需要和别名,什么时候不需要。 我将举一个例子:给定一些表P,LTP和T,以下查询运行完美:

SELECT DISTINCT pname FROM P WHERE P.pnr IN (SELECT pnr FROM LTP WHERE lnr='L1' AND tnr IN (SELECT tnr FROM T WHERE gewicht>10));

括号中的语句如何不是派生表?我会假设在这种情况下我不得不给他们像这样的别名:

SELECT DISTINCT pname FROM P WHERE P.pnr IN (SELECT pnr FROM LTP WHERE lnr='L1' AND tnr IN (SELECT tnr FROM T WHERE gewicht>10) AS TNEW) AS LTPNEW;

但这两个都破坏了代码。 如果有人能指出我究竟是什么误会,我真的很感激。

1 个答案:

答案 0 :(得分:3)

如果子查询位于查询的table_references部分(FROM子句和所有附带的JOIN),则需要包含别名。

如果子查询出现在其他位置,例如WHERESELECT部分,则它只是一个常规子查询,不需要别名。

来自documentation

  

派生表是FROM子句中子查询的内部名称。

根据经验,如果您可以按名称引用子查询中的列,则子查询需要别名以防止歧义。