我想知道是否可以在找到任何查询时用CROSS JOIN
安全地替换INNER JOIN
。
没有INNER JOIN
或ON
的USING
与CROSS JOIN
完全相同吗?如果是,是否只是为了在查询中更好地表达意图而发明了CROSS JOIN
类型?
该问题的附录为:
使用CROSS JOIN ... WHERE x
,INNER JOIN ... ON ( x )
或INNER JOIN ... WHERE ( x )
时,使用现代的和广泛使用的DBMS是否会有区别?
谢谢。
最佳答案
在所有现代数据库中,所有这些构造都针对同一计划进行了优化。
一些数据库(例如SQL Server
)在ON
之后需要INNER JOIN
条件,因此您的第三个查询将不会在那里解析。
表的可见性范围按JOIN
顺序进行,因此此查询:
SELECT *
FROM s1
JOIN s2
ON s1.id IN (s2.id, s3.id)
CROSS JOIN
s3
不会解析,而这一个:
SELECT *
FROM s2
CROSS JOIN
s3
JOIN s1
ON s1.id IN (s2.id, s3.id)
将。
关于sql - CROSS JOIN是没有ON子句的INNER JOIN的同义词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742196/