2015-07-12 86 views
2

,我讀了重寫多個右連接至左連接

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在這裏是不夠的。查詢返回不同數量的行。

回答

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保留的所有表第一表,不管條件是否計算爲true,false或NULL。 A RIGHT JOIN保留第二個表中的所有行,而不管條件如何。

我想說明的是,在您寫下它們的ON條件下,情況也是如此。對於所有ON條件可能並非如此。