postgres: возвращает строку, даже если в присоединяемой таблице нет совпадений - PullRequest
0 голосов
/ 06 мая 2018

У меня есть две таблицы, service_agreement и account. Таблица account содержит внешний ключ (service_agreement_id) для таблицы service_agreement.

По сути, я пытаюсь определить, подписала ли конкретная учетная запись последнее опубликованное соглашение об обслуживании определенного бизнеса.

Если учетная запись подписала последнее опубликованное соглашение об обслуживании для бизнеса, ничего не будет возвращено.

Если учетная запись НЕ ПОДПИСАЛА последнее опубликованное соглашение об обслуживании для бизнеса, соглашение будет возвращено.

Я пробовал что-то вроде следующего, но я изо всех сил пытаюсь получить желаемый результат:

SELECT * 
FROM (SELECT * FROM service_agreement s WHERE business_id = 1 ORDER BY published_at DESC LIMIT 1) AS s
LEFT JOIN account a ON s.id = a.service_agreement_id
WHERE a.user_id = 819;

Я использую Postgres 9.5.

Заранее спасибо за любые предложения!

1 Ответ

0 голосов
/ 06 мая 2018

Ваш запрос будет более уместно выглядеть следующим образом:

SELECT * 
FROM (SELECT * FROM 
     ) s LEFT JOIN
     account a
     ON s.id = a.service_agreement_id AND a.user_id = 819;

Я думаю, что вы действительно хотите:

select a.*
from account a left join
     (select sa.id
      from service_agreement sa
      where sa.business_id = 1
      order by published_at desc 
      limit 1
     ) sa
     on a.service_agreement_id = sa.id
where sa.id is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...