V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sandman511
V2EX  ›  程序员

一个 SQL 问题, where 子句如何不同情况用不同条件

  •  
  •   sandman511 · Apr 30, 2020 · 2796 views
    This topic created in 2189 days ago, the information mentioned may be changed or developed.
    SELECT * FROM T1,T2 
    WHERE ((T1.DATE>=2020 AND T1.ID = T2.ID) OR
    (T1.DATE < 2020 AND T1.NAME=T2.NAME(+) AND T1.AGE = T2.AGE(+) AND T1.GENDER=T2.GENDER(+)))
    

    就是说 2020 年以后的数据 直接 ID 匹配
    2020 以前的数据 用具体的信息匹配

    关键是还要做左外连接,但是左外连接不能和 OR 用在一起。
    请问下大家 要实现这样的需求该怎么写?

    谢谢回复

    12 replies    2020-04-30 11:07:25 +08:00
    insert000
        1
    insert000  
       Apr 30, 2020 via iPhone
    业务上实现,执行不同的 sql
    xizismile
        2
    xizismile  
       Apr 30, 2020 via Android
    楼上+1,建议业务上来实现。2020 以前的写一个 sql,2020 以后的写一个 sql,然后业务端去做聚合。都写到一个 sql 里,即使能写出来,那也是非常复杂的,后续迭代维护相当困难
    liyanggyang
        3
    liyanggyang  
       Apr 30, 2020
    楼上+1, 代码中实现业务。
    再不济就$也是在代码中写动态 sql (不建议)
    tankren
        4
    tankren  
       Apr 30, 2020
    分开写啊
    hanyingsen
        5
    hanyingsen  
       Apr 30, 2020
    union all
    sambawy
        6
    sambawy  
       Apr 30, 2020
    SQL 不要写太复杂 增加维护难度
    superrichman
        7
    superrichman  
       Apr 30, 2020
    可以尝试用 where case when
    crist
        8
    crist  
       Apr 30, 2020
    if sql else sql
    wangyanrui
        9
    wangyanrui  
       Apr 30, 2020
    真心建议代码里面处理,不然后续接手的人肯定喷你(手动狗头)
    来此一个曾经给人填过这种坑,并且骂骂咧咧的码农
    Kylinsun
        10
    Kylinsun  
       Apr 30, 2020 via iPhone
    根据业务拼接好 sql,写好注释
    hbolive
        11
    hbolive  
       Apr 30, 2020
    看到这个帖子,想起以前一个同事,以写复杂 SQL 代码为荣,能一句搞定的绝不两句,不管这个 SQL 多长。。
    7654
        12
    7654  
       Apr 30, 2020
    楼主这个需求 union 起来最方便
    @hbolive #11 汗,遇见过 600 多行的 SQL,case when decode 等等函数不计其数
    select *,(select *) from xx;select * from (select)嵌了不知道有多少
    一点点理清头大
    还是倾向于业务面处理原始数据,数据可以适量加工,但是不能包办一切
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1110 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 18:22 · PVG 02:22 · LAX 11:22 · JFK 14:22
    ♥ Do have faith in what you're doing.