Oracle SQL -- 解码为多个元素
Oracle SQL -- decode to multiple elements
我可能会像这样创建一个连接条件:
table1.value_1 = decode(table2.encoded_value,1,'a',2,'b',3,'c')
但是如果我需要进行类型内连接怎么办?
例如
我怎么能写一个解码来完成功能,比如说:
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 in ('d','e','f').
我认为这不可能,您应该改为更改查询的算法。
您可以像这样更改算法,而不是检查 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*/)
您通常不会使用函数。您只需使用布尔逻辑
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'))
我可能会像这样创建一个连接条件:
table1.value_1 = decode(table2.encoded_value,1,'a',2,'b',3,'c')
但是如果我需要进行类型内连接怎么办?
例如 我怎么能写一个解码来完成功能,比如说:
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 in ('d','e','f').
我认为这不可能,您应该改为更改查询的算法。
您可以像这样更改算法,而不是检查 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*/)
您通常不会使用函数。您只需使用布尔逻辑
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'))