- select * from XX where A || B != ‘ab’
|| 解决 where 条件为 A != ‘a’ and B != 'b’的查询条件
在工作项目中,遇到过一个需求=>查询历史交易列表,历史数据库表如图所示,包含这几个字段:银行卡号,交易时间,交易类型,交易状态,抹账标识。查询条件是:card_Id & trade_time & trade_type & (trade_status != 1’ & ind_flag != ‘ts01’),即在查询的结果集中过滤掉trade_status = ‘1’ 并且 ind_flag = 'ts01’的数据。
字段ind_flag 的取值为: 0和1
字段trade_status 的取值有四个:TS00,TS01,TS02,TS03
6b6ca9409307
image.png
我首先想到的是取差集
-
先查询满足(card_Id & trade_time & trade_type)这三个条件的结果集A,
-
再查询满足(trade_status = 1’ & ind_flag = ‘ts01’)的结果集B,
-
然后再用A MINUS B,即 A-B 取差集。
这里涉及到三张表:历史表,今天的表,昨天的表(数据没有过库时)
select *
from(
card_Id & trade_time & trade_type
)
minus
select *
from (
trade_status = 1’ & ind_flag = ‘ts01’
)
这样写的sql代码满足了查询需求,但是写出的sql代码很长,不符合代码规范。于是求助组内的数据库大佬,大佬一看,给了个 ‘||’ 就砍掉了一半的代码。
select *
from(
card_Id & trade_time & trade_type
)
where trade_status || trade_status != ‘1ts01’
- || 链接运算符,常用场景
|| 常用于selec 后面连接几个字段
select ‘姓名:’ || c.stuname || ‘, 课程:’ || b.coursename || ‘, 成绩:’ || a.score || ‘分数’ as sxcj
from score a, course b, stuinfo c
where a.courseid = b.courseid
and a.stuid = c.stuid