Как выбрать сравнение двух столбцов как одного столбца в 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 |
+---------+---------+-----------------+
Каков правильный синтаксис для этого?
Ответы
Ответ 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;
НТН