我想确认SQL查询
SELECT .... FROM apples, oranges LEFT JOIN kiwis ON kiwis.orange_id = oranges.id, bananas WHERE ....
完全等同于FROM子句中的其他排列,例如
SELECT .... FROM oranges LEFT JOIN kiwis ON kiwis.orange_id = oranges.id, bananas, apples WHERE ....
或者
SELECT .... FROM bananas, apples, oranges LEFT JOIN kiwis ON kiwis.orange_id = oranges.id WHERE ....
只要橙子和奇异果之间的显式LEFT JOIN保持不变即可。根据我在各种文档中所阅读的内容,返回的集合应该完全相同。
我真的只关心查询的结果,而不关心它在实际数据库中的性能。(我使用的是PostgreSQL 8.3,而AFAIK不支持有关连接顺序的优化程序提示,它将尝试自动创建最佳查询计划)。
它是相同的,但是对于 隐式 CROSS JOINs来说,它与地狱是模棱两可的。使用显式联接。
如果要加入WHERE子句,则结果 可能会 有所不同,因为联接和过滤器混合在一起了。
SELECT .... FROM apples a JOIN bananas b ON ... JOIN oranges o ON ... LEFT JOIN kiwis k ON k.orange_id = o.id WHERE (filters only)
笔记: