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
条件,这可能不是真的