美文网首页Oracle数据库管理之道数据库
oracle的sql查询中 '||' 在where 条件的妙用

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

作者: 腊月的梅花 | 来源:发表于2021-03-17 17:11 被阅读0次

    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 条件的妙用

        本文链接:https://www.haomeiwen.com/subject/zjbscltx.html