oracle的sql查询中 '||' 在where 条件的妙用

1. 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

image.png

我首先想到的是取差集

1. 先查询满足(card_Id & trade_time & trade_type)这三个条件的结果集A,
2. 再查询满足(trade_status = 1' & ind_flag = 'ts01')的结果集B,
3. 然后再用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'

2. || 链接运算符,常用场景

|| 常用于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

你可能感兴趣的:(oracle的sql查询中 '||' 在where 条件的妙用)