我读了那个
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在这里是不够的。查询返回不同的行数。
答案 0 :(得分:4)
只需反转表格:
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
条件,情况可能并非如此。