postgresql离开联接多个条件

时间:2018-06-27 09:56:20

标签: postgresql left-join multiple-conditions junction-table

我仍然是PostgreSQL的入门者-任何人都可以帮助查询:

select distinct j.id, tt.title, m_scopus.provider_id
from journal j   
join temporal_title "tt"   
     on (j.id = tt.journal_id and tt.list_index = 0) 
left join journal_metrics "jm_scopus"  
     on (jm_scopus.journal_id = j.id) 
left join metrics "m_scopus" 
     on (m_scopus.id = jm_scopus.metrics_id 
     and m_scopus.source_id = 235451508 
     and m_scopus.year_integer = 2017)

问题是我得到了带有空“ provider_id”的行,我不希望它们出现:

journal_id     title                    provider_id
263290036      German Journal of...     scopusJournalsMetricsProvider
263290036      German Journal of...     NULL
72418282       Europa azul              NULL    
207412571      IAC International...     NULL

行1,行3和行4可以,但行2则不行,因为我需要的信息是provider_id(如果存在),而如果为NULL。

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的数据(模型),则journal_metrics表是 junction表,在最终结果中不需要该表,因此可以将其保留在主表之外查询,避免使用双LEFT JOIN


SELECT j.id, tt.title, m.provider_id
FROM journal j
JOIN temporal_title tt  
    ON j.id = tt.journal_id AND tt.list_index = 0
LEFT JOIN metrics m 
        ON m.source_id = 235451508
        AND m_scopus.year_integer = 2017
        AND EXISTS ( SELECT *
                FROM journal_metrics jm -- The junction table
                WHERE jm.journal_id = j.id 
                AND jm.metrics_id = m.id 
                )
        ;