postgres:返回行,即使连接表中没有行匹配

时间:2018-05-06 20:27:29

标签: sql postgresql

我有两个表,service_agreementaccountaccount表包含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 :(得分:1)

您的查询更适合这样:

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;