将多个右连接重写为左连接
Posted
技术标签:
【中文标题】将多个右连接重写为左连接【英文标题】:Rewrite multiple right joins to left joins 【发布时间】:2015-09-30 20:09:28 【问题描述】:我读到了
SELECT * FROM table_0
RIGHT JOIN table_1 ON table_0.col_0 = table_1.col_0;
等同于:
SELECT * FROM table_1
LEFT JOIN table_0 ON table_0.col_0 = table_1.col_0;
我如何重写更长的查询,比如说:
SELECT * FROM table_0
RIGHT JOIN table_1 ON table_1.col_0 = table_0.col_0
RIGHT JOIN table_2 ON table_2.col_1 = table_1.col_1
RIGHT JOIN table_3 ON table_3.col_2 = table_2.col_2;
只使用左连接?我会对此类问题的通用解决方案感兴趣。
如果重要的话,我对 PostgreSQL 方言特别感兴趣。 从解释输出中我可以看到,在这里简单地将 LEFT 替换为 RIGHT 是不够的。查询返回不同的行数。
【问题讨论】:
【参考方案1】:只需颠倒表格:
SELECT *
FROM table_3 LEFT JOIN
table_2
ON table_3.col_2 = table_2.col_2 LEFT JOIN
table_1
ON table_2.col_1 = table_1.col_1 LEFT JOIN
table_0
ON table_1.col_0 = table_0.col_0;
LEFT JOIN
将所有表保留在 first 表中,无论条件计算结果为 true、false 还是 NULL。 RIGHT JOIN
将所有行保留在第二个表中,无论条件如何。
我想指出,这对于您编写的 ON
条件是正确的。这可能不适用于所有 ON
条件。
【讨论】:
以上是关于将多个右连接重写为左连接的主要内容,如果未能解决你的问题,请参考以下文章