Postgres ИЛИ исключить оператора - PullRequest
0 голосов
/ 15 октября 2018

у меня есть запрос на 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;

На где условие Мне нужен оператор, который, если первый оператор верен, не проверяет другой оператор

, какой из них вы рекомендуете?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Теперь вы видите, что вам нужен Xor, которого нет у 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;
0 голосов
/ 15 октября 2018

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

select * from abc where a = True or (b= False and c = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...