sql - 将多个右连接重写为左连接

标签 sql postgresql left-join relational-algebra right-join

我读过

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;

只使用 LEFT JOINS?我会对此类问题的通用解决方案感兴趣。

如果有必要的话,我对 PostgreSQL 方言特别感兴趣。 从解释输出中我可以看出,这里仅将 LEFT 替换为 RIGHT 是不够的。查询返回不同的行数。

最佳答案

只是颠倒表格:

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 将所有表保留在第一个 表中,无论条件的计算结果是真、假还是 NULL。 RIGHT JOIN 保留第二个表中的所有行,无论条件如何。

我想指出,这对于您编写的 ON 条件是正确的。它可能不适用于所有 ON 条件。

关于sql - 将多个右连接重写为左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31368502/

相关文章:

sql - 检查空的 xml 列

php - 如何在 Azure 上运行的服务器上安装 MySQL PHP 驱动程序?

sql - 使用串行主键列安全地重命名表

postgresql - 在 Windows 7 上使用 PIP、virtualenv、psycopg2、Django 的 Heroku 教程

mysql - 在 php 中使用内部连接与 mysql lat long 查询

php - 私信系统查询

java - SQL ORDER BY 子句可以与数据源中的任何列一起使用吗?

ruby-on-rails - 事件记录查询和 heroku 问题。

MySQL - 使用 LEFT JOIN 会产生意想不到的结果

MySQL left join variation - 甚至在丢失的行上选择