#postgresql #select #conditional-statements
#postgresql #выберите #условные операторы
Вопрос:
Я не уверен, правильно ли указано название проблемы. Я опишу проблему.
У меня есть sql-запрос:
SELECT * FROM table WHERE condidtion_1 or condition_2;
в таблице есть элемент, который может соответствовать condition_1
or condition_2
. Возможно каким-то образом, что:
- если элементы совпадают
condition_1
, мы возвращаем только эти элементы и не проверяем совпадающие элементыcondition_2
-
если не совпадает
condition_1
, мы возвращаем только тот элемент, который соответствуетcondition_2
-
если не соответствует
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. Обновленный вопрос.