gpt4 book ai didi

mysql - 每个派生表都必须有自己的别名——什么时候是派生表?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:32 25 4
gpt4 key购买 nike

首先,请注意,我知道其他线程也有类似的问题,但它们对我的理解帮助不大。相反,我现在有时会遇到分配别名会破坏我的代码的问题,如下所述。

所以我经常收到错误消息,然后开始为那些我认为是“派生表”的子查询取别名,但有时这样做时,我现在收到消息“你的 SQL 中有错误” syntax' 而不是,在删除 '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;

但是这些都破坏了代码。如果有人能指出我到底误解了什么,我将不胜感激。

最佳答案

如果子查询在table_references查询的一部分(FROM 子句和所有随附的 JOIN),它需要包含一个别名。

如果子查询出现在别处,比如在 WHERESELECT 部分,它只是一个常规子查询,不需要别名。

来自documentation :

Derived tables is the internal name for subqueries in the FROM clause.

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

关于mysql - 每个派生表都必须有自己的别名——什么时候是派生表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com