【问题标题】: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 是不够的。查询返回不同的行数。

【问题讨论】:

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


    【解决方案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 条件。

    【讨论】:

      猜你喜欢
      • 2020-07-28
      • 2014-02-24
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多