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

Vit*_*lio 36 sql oracle select

我无法弄清楚如何在SELECT查询中添加一个列,指示两列是否在Oracle中包含相同的数据.

我想写一个像这样的查询:

select column1, column2, column1=column2 from table
Run Code Online (Sandbox Code Playgroud)

如果我有这张桌子:

+---------+---------+
| column1 | column2 |
+---------+---------+
| value1  | value1  |
| value2  | value3  |
| value4  | value4  |
+---------+---------+
Run Code Online (Sandbox Code Playgroud)

得到一个结果:

+---------+---------+-----------------+
| column1 | column2 | column1=column2 |
+---------+---------+-----------------+
| value1  | value1  | true            |
| value2  | value3  | false           |
| value4  | value4  | true            |
+---------+---------+-----------------+
Run Code Online (Sandbox Code Playgroud)

这样做的正确语法是什么?

vc *_* 74 61

如果您还要考虑空值相等,请尝试以下操作

select column1, column2, 
   case
      when column1 is NULL and column2 is NULL then 'true'  
      when column1=column2 then 'true' 
      else 'false' 
   end 
from table;
Run Code Online (Sandbox Code Playgroud)


Ron*_*nis 11

DECODE几年前我停止使用,因为它不便携.此外,它不如a的灵活性可读性差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  
Run Code Online (Sandbox Code Playgroud)


Zso*_*kai 6

select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;
Run Code Online (Sandbox Code Playgroud)

HTH