Postgres或排除运算符

时间:2018-10-15 14:41:22

标签: sql postgresql

我有一个关于postgres的查询,但是如果其中一个陈述是正确的,例如,我不想应用另一个where陈述:

SELECT
DISTINCT ON (pa.id) id,
pa.family_id,
pel.item_id,
pel.parent_id,
pel.group_id,
pel.coverage_type,
pel.start_date,
pel.end_date,
pel.updated_at,
pel.updated_by
FROM
patient pa
JOIN patient_eligibility_list pel ON pel.parent_id = pa.id
AND ((now()BETWEEN pel.start_dateAND pel.end_date)
OR (now() > pel.start_date)
OR (now() > pel.end_date))
WHERE
pel.group_id = 1575
AND pel.start_date < pel.end_date
ORDER BY
pel.end_date DESC;

where 条件下,我需要一个运算符,如果第一个语句为true,则不会验证另一个语句

您推荐哪个?

2 个答案:

答案 0 :(得分:0)

您应该尝试明智地使用OR关键字。 您的查询应该看起来像这样

select * from abc where a = True or (b= False and c = True)

答案 1 :(得分:0)

现在看到您想要的是Xgre,而postgres没有,所以我更新了代码以提供您想要的结果。

SELECT
 DISTINCT ON (pa.id) id,
 pa.family_id,
 pel.item_id,
 pel.parent_id,
 pel.group_id,
 pel.coverage_type,
 pel.start_date,
 pel.end_date,
 pel.updated_at,
 pel.updated_by
FROM
 patient pa
JOIN patient_eligibility_list pel ON pel.parent_id = pa.id
 AND ((now()BETWEEN pel.start_dateAND pel.end_date)
 OR (now() > pel.start_date)
 OR (now() > pel.end_date))
WHERE
 (pel.group_id = 1575 and pel.start_date >= pel.end_date)
or
 (pel.group_id != 1575 and pel.start_date < pel.end_date)
ORDER BY
 pel.end_date DESC;