我有两个表,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。
提前感谢任何建议!
答案 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;