Oracle 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

6b6ca9409307

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’

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值