如何在Oracle中选择两列的比较作为一列

时间:2011-01-28 11:34:58

标签: sql oracle select

我无法弄清楚如何在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            |
+---------+---------+-----------------+

执行此操作的正确语法是什么?

3 个答案:

答案 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