我无法弄清楚如何在SELECT查询中添加一个列,指示两列是否在Oracle中包含相同的数据。
我想写一个类似的查询:
select column1, column2, column1=column2 from table
,如果我有这张表:
+---------+---------+
| column1 | column2 |
+---------+---------+
| value1 | value1 |
| value2 | value3 |
| value4 | value4 |
+---------+---------+
获得如下结果:
+---------+---------+-----------------+
| column1 | column2 | column1=column2 |
+---------+---------+-----------------+
| value1 | value1 | true |
| value2 | value3 | false |
| value4 | value4 | true |
+---------+---------+-----------------+
执行此操作的正确语法是什么?
答案 0 :(得分:57)
如果您也想考虑空值相等,请尝试以下
select column1, column2,
case
when column1 is NULL and column2 is NULL then 'true'
when column1=column2 then 'true'
else 'false'
end
from table;
答案 1 :(得分:11)
几年前我停止使用DECODE
,因为它不可移植。此外,与CASE/WHEN
相比,它的灵活性和的可读性较差。
然而,由于它处理NULL的方式,你可以用解码做一个简洁的“技巧”。在解码中,NULL等于NULL。可以利用它来判断两列是否不同,如下所示。
select a, b, decode(a, b, 'true', 'false') as same
from t;
A B SAME
------ ------ -----
1 1 true
1 0 false
1 false
null null true
答案 2 :(得分:6)
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;
HTH