sql - "table A left outer join table B ON TRUE"是什么意思?

标签 sql join select

我知道条件用于表连接。但是我遇到了一个特定的情况,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/

相关文章:

sql - 为数据库中的所有表创建索引?

java - Apache Derby # 符号上出现词法错误?

sql - 没有 TABLE 的 SELECT (JDBC)

sql - MS Access SQL 插入到不存在记录的表中

带有 SUM 和 MAX 的 MYSQL SELECT CASE

MYSQL 从当前年份、当前月份和星期几中获取日期

php - 如何制定连接多个表的查询

MySQL 左连接多行

mysql - 从与 Table2 连接的 Table3 更新 Table1,但 Table 2 可能引用多个 table3 条目

php - 我的社交网络中的用户无法注册和登录