Подтвердить что ты не робот

Как выбрать сравнение двух столбцов как одного столбца в 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            |
+---------+---------+-----------------+

Каков правильный синтаксис для этого?

4b9b3361

Ответ 1

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

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

Ответ 2

Я перестал использовать 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  

Ответ 3

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

НТН