【发布时间】:2016-07-23 00:22:14
【问题描述】:
我意识到 MySQL 并没有要求我为这个查询中的自然连接操作的结果提供别名:
SELECT * FROM TABLE1 NATURAL JOIN TABLE2,
但不是说表是派生表,因此需要别名吗?
这确实是这个问题的后续问题:Every derived table must have its own alias - when is something a derived table?,在那里我被告知查询的 FROM 部分中的“新”表是派生表,因此它们需要别名。
如果它确实不需要别名,我将如何在这样的子查询中引用这个新表:SELECT * FROM TABLE1 NATURAL JOIN TABLE2 WHERE NOT EXISTS (SELECT * FROM TABLE1 WHERE attribute1='thenewtable'.attribute2)?
【问题讨论】:
-
没有。这就是
SELECT 1和SELECT * FROM (SELECT 1)之间的区别,比如说 -
选择查询中的记录集不是新表。该查询是否具有联接或者是否具有联接,都没有关系。至于您似乎在尝试什么,您也许可以简单地使用一个简单的 where 子句
where attribute1 <> attribute2。 -
也许很有趣?事实证明,“自然加入”“不太好”。我建议阅读一些赞成的 cmets。 - Difference between natural join and inner join.