我知道条件用于表连接。但是我遇到了一个特定的情况,SQL代码写成“Table A join table B ON TRUE
”
基于“ON TRUE”条件会发生什么?这只是一个没有任何条件选择的完全交叉连接吗?
其实,原来的表达是这样的:
Table A LEFT outer join table B on TRUE
假设 A 有 m 行,B 有 n 行。 “左外连接”和“真实”之间是否有任何冲突?因为它似乎“正确”导致交叉连接。
根据我的猜测,结果将是 m*n 行。所以,它不需要写“左外连接”,只需一个“连接”就会给出相同的输出,对吗?
最佳答案
是的。这与 CROSS JOIN
相同.
在 MySQL 中,我们可以省略 [可选] CROSS
关键字。我们也可以省略 ON
条款。ON
中的条件子句被评估为一个 bool 值,所以我们也可以写一些类似 ON 1=1
的东西。 .
更新:
(该问题已编辑,添加另一个关于 a LEFT [OUTER] JOIN b
的问题,与原始结构不同: a JOIN b
)
“LEFT [OUTER] JOIN
”略有不同,即使在右侧表中找不到匹配的行,也会返回左侧表中的行。
如前所述,CROSS JOIN
表之间 (包含 m 行)和表 b 包含 n 行,没有任何其他谓词,将产生 m x n 行的结果集。LEFT [OUTER] JOIN
在表 的特殊情况下将产生不同的结果集b 包含 0 行。
CREATE TABLE a (i INT);
CREATE TABLE b (i INT);
INSERT INTO a VALUES (1),(2),(3);
SELECT a.i, b.i FROM a LEFT JOIN b ON TRUE ;
请注意,即使表 b 包含 0 行,LEFT JOIN 也会从表 a(总共 m 行)返回行。
关于sql - "table A left outer join table B ON TRUE"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520048/