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

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

  •  
  •   junjies · 2014-02-12 23:53:12 +08:00 · 3064 次点击
    这是一个创建于 3956 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用例子来说吧:

    比如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-02-12 23:55:38 +08:00   ❤️ 1
    你这个逻辑就不成立啊。。。region=1,7,3的时候,你LOG不可能给予多个值啊。。。

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

    可能我的表达太绕了, 其实就是想拿到从一个值到一个list的映射
    junjies
        3
    junjies  
    OP
       2014-02-13 00:30:55 +08:00
    这种 。没有办法么?
    yangqi
        4
    yangqi  
       2014-02-13 00:33:48 +08:00
    明白了,可以试这样

    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-02-13 00:34:20 +08:00
    当然,上面的是在where后面的
    junjies
        6
    junjies  
    OP
       2014-02-13 10:21:27 +08:00
    @yangqi 好像when后面不能接条件表达式http://www.techonthenet.com/oracle/functions/case.php
    yangqi
        7
    yangqi  
       2014-02-13 11:15:02 +08:00
    @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-02-13 12:15:19 +08:00
    好吧, 貌似是不可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:49 · PVG 05:49 · LAX 13:49 · JFK 16:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.