V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
junjies
V2EX  ›  问与答

SQL 语句怎么写 一对多 mapping (如何写 sql 语句,关于 case when 或者 oracle 的 decode)

  •  
  •   junjies · 2014 年 2 月 12 日 · 3503 次点击
    这是一个创建于 4360 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用例子来说吧:

    比如case when, 我可以通过判断IOG来得到region为 1或7或3

    REGION =
    CASE WHEN IOG IN (1,2,14,37,72,101) THEN '1'
    WHEN IOG IN (11,22,48,77) THEN '7'
    WHEN IOG IN (7,13,18,24,39) THEN '3'
    ELSE NULL END

    有什么办法可以让它反过来, 比如 (当然下面这么写语法是错的)
    IOG in case when REGION = 1 THEN (1,2,14,37,72,101)
    WHEN REGION = 7 THEN (11,22,48,77)
    WHEN REGION = 3 THEN (7,13,18,24,39)
    ELSE NULL END


    oracle的decode貌似也是一对一mapping的,上面的需求怎么来写,各位大神指导一下,感激不尽
    8 条回复    1970-01-01 08:00:00 +08:00
    yangqi
        1
    yangqi  
       2014 年 2 月 12 日   ❤️ 1
    你这个逻辑就不成立啊。。。region=1,7,3的时候,你LOG不可能给予多个值啊。。。

    IN()是条件判断,不是赋值。。。你先把你想要做的表达出来
    junjies
        2
    junjies  
    OP
       2014 年 2 月 13 日
    @yangqi 恩,从region到IOG不是赋值的关系, 是关系的判断。
    其实我想要的就是我设置了region之后,在where条件里我的iog一定是这几个值之一,

    可能我的表达太绕了, 其实就是想拿到从一个值到一个list的映射
    junjies
        3
    junjies  
    OP
       2014 年 2 月 13 日
    这种 。没有办法么?
    yangqi
        4
    yangqi  
       2014 年 2 月 13 日
    明白了,可以试这样

    case when REGION = 1 THEN IOG in (1,2,14,37,72,101)
    WHEN REGION = 7 THEN IOG in (11,22,48,77)
    WHEN REGION = 3 THEN IOG in (7,13,18,24,39)
    END
    yangqi
        5
    yangqi  
       2014 年 2 月 13 日
    当然,上面的是在where后面的
    junjies
        6
    junjies  
    OP
       2014 年 2 月 13 日
    @yangqi 好像when后面不能接条件表达式http://www.techonthenet.com/oracle/functions/case.php
    yangqi
        7
    yangqi  
       2014 年 2 月 13 日
    @junjies 这不是明确写着可以的么

    CASE [ expression ]

    WHEN condition_1 THEN result_1
    WHEN condition_2 THEN result_2
    ...
    WHEN condition_n THEN result_n

    ELSE result

    END
    yangqi
        8
    yangqi  
       2014 年 2 月 13 日
    好吧, 貌似是不可以的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5183 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:21 · PVG 17:21 · LAX 01:21 · JFK 04:21
    ♥ Do have faith in what you're doing.