[英]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.