У меня есть таблица PSQL
+--------+------+------+------+
| Col1 | Col2 | Col3 | Col4 |
+--------+------+------+------+
| 001 | 00A | 00B | 001 |
| 001001 | 00A | 00B | 001 |
| 002 | 00X | 00Y | 002 |
| 002002 | 00X | 00Y | 002 |
+--------+------+------+------+
У меня следующий запрос PSQL:
select *
from my_table
where (Col1 = '001' or Col4 = '001')
and Col2 = '00A'
order by Col3 asc;
Я получаю первые два ряда.
Здесь происходит то, что оно соответствует обоим условиям для условия OR
. Мне нужно соответствовать только одному из or
условий. То есть, если первое условие (Col1='001001'
) истинно, тогда не оценивает следующее условие.
Мне нужно выбрать только 2-й ряд (| 001001 | 00A | 00B | 001 |
)
Я создал другой запрос, используя EXCEPT
select *
from my_table
where (Col1 = '001' or Col4 = '001')
and Col2 = '00A'
except (select *
from my_table
where Col1 != '001'
and Col2 = '00A')
order by Col3 asc
limit 1;
Хотелось бы узнать, есть ли другие элегантные запросы для этой работы?