Как выбрать сравнение двух столбцов в один столбец в Oracle

Я не могу понять, как добавить столбец в мой запрос 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 ответов


Если вы хотите также рассмотреть равенство нулевых значений, попробуйте следующее

select column1, column2, 
   case
      when column1 is NULL and column2 is NULL then 'true'  
      when column1=column2 then 'true' 
      else 'false' 
   end 
from table;

я перестал использовать DECODE несколько лет назад, потому что это не портативный. Кроме того, он менее гибкий и менее читаемый, чем CASE/WHEN.

однако есть один аккуратный "трюк", который вы можете сделать с декодированием из-за того, как он имеет дело с NULL. В decode значение 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  

select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;

HTH