postgresql оставил присоединиться к нескольким условиям - PullRequest
0 голосов
/ 27 июня 2018

Я все еще NB для 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 голосов
/ 27 июня 2018

Если я правильно понимаю ваши данные (модель), таблица journal_metrics - это таблица соединений , которая не нужна в конечном результате, поэтому ее можно исключить из основного запроса, избегая двойной 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 
                )
        ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...