Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个右连接重写为左连接_Sql_Postgresql_Left Join_Relational Algebra_Right Join - Fatal编程技术网

Sql 将多个右连接重写为左连接

Sql 将多个右连接重写为左连接,sql,postgresql,left-join,relational-algebra,right-join,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 = tab

我读到了

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方言特别感兴趣,如果它真的重要的话。
从explain输出中,我可以看出,简单地从左向右替换是不够的。查询返回的行数不同。

只需颠倒表格即可:

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
将所有表保留在第一个表中,而不管条件的计算结果是true、false还是NULL。
右联接将保留第二个表中的所有行,而不考虑条件

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