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