Oracle SQL - 解码为多个元素

时间:2015-02-04 23:18:43

标签: sql oracle decode

我可能会创建一个类似的连接条件:

table1.value_1 = decode(table2.encoded_value,1,'a',2,'b',3,'c')

但是如果我需要进行类型连接呢?

e.g。 我怎么能写一个解码来完成功能,比如说:

table1.value_1 in 
  decode(table2.encoded_value,
         1,
         'a',
         2,
         'b',
         3,
         'c',
         4,
         ('d','e','f')
   );

此语法无效,但想法是在table2.encoded_value为4的情况下,条件将变为table1.value_1('d','e','f')。

2 个答案:

答案 0 :(得分:3)

您通常不会使用某项功能。你只需要使用布尔逻辑

WHERE (table2.encoded_value = 1 AND table1.value_1 = 'a')
   OR (table2.encoded_value = 2 AND table1.value_1 = 'b')
   OR (table2.encoded_value = 3 AND table1.value_1 = 'c')
   OR (table2.encoded_value = 4 AND table1.value_1 in( 'd', 'e', 'f'))

答案 1 :(得分:2)

我认为这不可能,您应该改变查询的算法。

您可以更改算法,而不是检查value_1是否在某个范围内:

(table2.encoded_value <> 4 
and table1.value_1 = decode(table2.encoded_value,
                              1, 'a',
                              2, 'b',
                              3, 'c'))
or table2.encoded_value = 4 and table1.value_1 in ('d', 'e', 'f'/*Or a select of multiple values*/)