使用子连接时,我注意到产生相同结果的两种不同方式。在子连接中,使用“选择”连接两个表,然后给它一个别名,该别名将在后续行中引用。另一个只是“匿名”连接两个表,后续行使用 Sub-Join 的表别名。我有下面的示例代码。我的问题是:
这些是等价的吗?一个只是节省击键?
使用“选择”的人是否创建了一个临时表,而另一个人没有?
两者之间会有性能差异吗?我认为不会有基于执行分析器的,但我想我会问。
是否有一个或其他“子连接样式”的“名称”(例如,别名子连接与匿名子连接?)
就表名和列名别名的范围规则而言,是否有任何好的文档可以有人指出我可以解释这样的情况?我已经搜索并找不到任何匹配的内容(尽管我不确定我是否“正确”搜索)?
这是两个查询:
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (select b2.*, bp2.product_id
from Bugs b2
JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id) AS sub1
ON (bp1.product_id = sub1.product_id AND (b1.date_reported < sub1.date_reported))
WHERE sub1.bug_id IS NULL;
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (Bugs b2 JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id)
ON (bp1.product_id = bp2.product_id AND (b1.date_reported < b2.date_reported))
WHERE b2.bug_id IS NULL;