【发布时间】:2019-05-29 06:05:18
【问题描述】:
我有一个 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') 为真,则 不评估 下一个条件。
我只需要选择第二行 (| 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;
我想知道这个工作是否还有其他优雅的查询?
【问题讨论】:
-
用例条件
-
@NidhinDavid 。 . .我真的很困惑。条件
Col1='001001'不在您的查询中。即使你解决了这个问题,我仍然对你想要什么感到困惑。你总是想要一排吗?如果更多行符合您的条件怎么办?
标签: sql database postgresql psql logical-operators