postgresql left join 多个条件
postgresql left join multiple conditions
我仍然是 PostgreSQL 的 NB - 谁能帮助解决这个问题:
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。
如果我正确理解你的数据(模型),journal_metrics
table 是一个 连接点 table,在最终结果,因此可以将其排除在主查询之外,避免双重 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
)
;
我仍然是 PostgreSQL 的 NB - 谁能帮助解决这个问题:
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。
如果我正确理解你的数据(模型),journal_metrics
table 是一个 连接点 table,在最终结果,因此可以将其排除在主查询之外,避免双重 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
)
;