Результат Postgresql на основе условия

#postgresql #select #conditional-statements

#postgresql #выберите #условные операторы

Вопрос:

Я не уверен, правильно ли указано название проблемы. Я опишу проблему.

У меня есть sql-запрос:

 SELECT * FROM table WHERE condidtion_1 or condition_2;
  

в таблице есть элемент, который может соответствовать condition_1 or condition_2 . Возможно каким-то образом, что:

  1. если элементы совпадают condition_1 , мы возвращаем только эти элементы и не проверяем совпадающие элементы condition_2
  2. если не совпадает condition_1 , мы возвращаем только тот элемент, который соответствует condition_2

  3. если не соответствует condition_1 , а condition_2 затем ничего не возвращает (обычный способ)

Спасибо за совет.

Редактировать

Ответ Гордона вдохновил меня протестировать что-то подобное, и, похоже, все работает нормально, но, может быть, какое-то другое более понятное решение?

 SELECT * FROM table WHERE (condition_1 AND NOT condition_2) OR (NOT condition_1 AND condition_2);
  

Комментарии:

1. Я не понимаю вашего вопроса. Почему это отличается от обычного ИЛИ? Что вы подразумеваете под элементами — записями? Или столбцы? Можете ли вы опубликовать пару примеров записей и желаемый результат?

2. ИЛИ вернет строки, соответствующие условию_1 ИЛИ условию_2. Посмотрите на мое обновление. Я думаю, что это все проясняет.

3. Ах, вы имеете в виду «исключительное ИЛИ». Ваш ответ работает, но и ответ Гордона тоже, если вы заключите в квадратные скобки первое утверждение «ИЛИ»…

Ответ №1:

Сравните результаты условий напрямую

 SELECT *
FROM table
WHERE (condition_1) != (condition_2)
  

Ответ №2:

Это то, что вы хотите?

 SELECT *
FROM table
WHERE (condition_1 or condition_2) and
      not (condition_1 and condition_2);
  

Комментарии:

1. К сожалению, нет. Возможно, я неправильно определяю проблему, но condition_1 может возвращать другие результаты, чем condition_2. Я обновлю проблему, чтобы прояснить это.

2. Обновленный вопрос.