我见过有人写下下面的查询
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name像这样写的
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name2.column_name =table_name1.column_name这真的有什么不同吗?
发布于 2009-09-05 17:00:55
在正常情况下不会。可以想象,可能会有一些足够复杂的查询,比您的示例复杂得多,其中连接优化器将不堪重负,这可能会很重要,但如果这是可能的,您将不得不非常努力地工作。
顺便说一句,你可以把这两个都写成USING (column_name)。:)
为了对这类问题进行DIY分析,我还建议您熟悉一下EXPLAIN。
发布于 2009-09-05 17:08:50
这是没有区别的。
table_name1.column_name=table_name2.column_name和
table_name2.column_name=table_name1.column_name也有同样的意思。
连接的“左”部分是引用表,而不是比较--我猜这是您隐含的问题?
发布于 2009-09-05 18:29:51
这可能是个人喜好的问题;我碰巧编写了像您的第二个示例一样的连接,但我不能说我在做这件事上是百分之百一致的。
此外,回到查询优化器不像现在这样智能的旧时代,您可能会发现,在连接表达式或WHERE子句中重新排序操作数可能会产生很大的不同;即,如果操作数按一种方式排序,优化器将使用索引,而不是在操作数颠倒时使用索引。
我想我有一个Oracle7闪回。得躺下来。
https://stackoverflow.com/questions/1383753
复制相似问题