【发布时间】:2014-11-16 13:44:10
【问题描述】:
最近,我遇到了一个如下所示的 SQL 查询:
SELECT * FROM A, B WHERE A.NUM = B.NUM
在我看来,这似乎与 INNER JOIN 的返回完全相同:
SELECT * FROM A INNER JOIN B ON A.NUM = B.NUM
有什么理智的理由为什么有人会在这里使用CROSS JOIN?编辑:似乎大多数 SQL 应用程序都会在这里自动使用INNER JOIN。
数据库是HSQLDB
【问题讨论】:
-
第一个不是
CROSS JOIN,它是INNER JOIN的旧形式,在WHERE中具有连接条件。查询是一样的。 -
能否请您指定您使用的 RDBMS,这样我们就不必猜测了?
-
不,没有任何理智的人会在这里使用 CROSS JOIN 的理由。 CROSS JOIN 意味着您想要一个笛卡尔积 - 虽然可以强制它表现得像带有额外过滤器的 INNER JOIN,但我不明白这一点。当你想要一个 INNER JOIN 时,使用 INNER JOIN;当你想要一个 CROSS JOIN 时,使用 CROSS JOIN。不管开源文档怎么说,或者 MySQL 多么想偏离 SQL 标准。我可以在很多没有明确禁止非机动车行驶的高速公路上骑三轮车,但这并不意味着这样做是理智或合乎逻辑的。
标签: sql inner-join hsqldb cross-join