在postgres

时间:2017-06-08 09:43:48

标签: sql postgresql model left-join outer-join

我甚至难以提出正确的问题标题。我会采取任何建议来编辑它。

我的问题:我有一个应用程序(工作板),有两个模型:用户工作。用户可以拥有多个职位,职位可以是premiumfree。作业也可以过期活动。它们在valid_until参数IS NOT NULL处于活动状态,否则它们已过期(我有一个后台工作,每天自动设置它)。

我正在尝试选择具有有效作业的用户,但我希望具有高级作业的用户来自具有免费作业的用户,假设用户可以同时激活高级和免费的职位发布。

SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;

以上查询正确选择至少有一个活动作业(高级或免费)的用户,我只需要根据作业表订购用户。我将不胜感激任何帮助/提示。谢谢!

1 个答案:

答案 0 :(得分:3)

我相信以下内容可以满足您的需求:

SELECT users.id, users.email FROM users
JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL
GROUP BY users.id, users.email
ORDER BY min(case when jobs.type = 'premium' then 1 else 2 end)

我无法看到包含Premium vs Free的字段的名称,所以我创建了一个!此外,我将JOIN更改为INNER JOIN,因为WHERE子句在任何情况下都具有此效果。