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

2014-02-12 23:53:12 +08:00
 junjies
用例子来说吧:

比如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的,上面的需求怎么来写,各位大神指导一下,感激不尽
3070 次点击
所在节点    问与答
8 条回复
yangqi
2014-02-12 23:55:38 +08:00
你这个逻辑就不成立啊。。。region=1,7,3的时候,你LOG不可能给予多个值啊。。。

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

可能我的表达太绕了, 其实就是想拿到从一个值到一个list的映射
junjies
2014-02-13 00:30:55 +08:00
这种 。没有办法么?
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
2014-02-13 00:34:20 +08:00
当然,上面的是在where后面的
junjies
2014-02-13 10:21:27 +08:00
@yangqi 好像when后面不能接条件表达式http://www.techonthenet.com/oracle/functions/case.php
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
2014-02-13 12:15:19 +08:00
好吧, 貌似是不可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX