簡體   English   中英

如果條件成立,如何加入?

[英]How to join when condition is true?

SELECT 
     *
    FROM   data_entity a
        LEFT JOIN list_dokumen b ON a.dokumen = b."id"
            CASE WHEN b.pengirim_level == 1
                            THEN LEFT JOIN master_polda c ON c.id_polda = b.pengirim_level_id
                     WHEN b.pengirim_level == 2
                            THEN LEFT JOIN master_polres d ON d.id_polres = b.pengirim_level_id
                     WHEN b.pengirim_level == 3
                            THEN LEFT JOIN master_polsek e ON e.id_polsek = b.pengirim_level_id
                     WHEN b.pengirim_level == NULL
                            THEN NULL
            END

我認為您可以將查詢重寫為:

        SELECT * FROM   data_entity a 
                    LEFT JOIN list_dokumen b  ON a.dokumen = b."id"
                    LEFT JOIN master_polda c  ON c.id_polda = b.pengirim_level_id and b.pengirim_level = 1
                    LEFT JOIN master_polres d ON d.id_polres = b.pengirim_level_id and b.pengirim_level == 2
                    LEFT JOIN master_polsek e ON e.id_polsek = b.pengirim_level_id and b.pengirim_level == 3
            END

您可以使用動態sql根據PL / pgSQL函數內的條件構造SQL。 請參閱PL / pgSQL EXEC文檔

或者您可以加入所有三個表並使用coalesce從其中一個表中獲取必要的字段。

SELECT a.*, b.*, coalesce(c.FIELD, d.FIELD, e.FIELD)
FROM data_entity a
LEFT JOIN list_dokumen b ON a.dokumen = b."id"
LEFT JOIN master_polda c ON b.pengirim_level == 1 AND c.id_polda = b.pengirim_level_id
LEFT JOIN master_polres d ON b.pengirim_level == 2 AND d.id_polres = b.pengirim_level_id
LEFT JOIN master_polsek e ON b.pengirim_level == 3 AND e.id_polsek = b.pengirim_level_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM