Je ne peux pas comprendre comment ajouter une colonne à ma requête SELECT indiquant si deux colonnes contiennent les mêmes données dans Oracle.
Je voudrais écrire une requête comme:
select column1, column2, column1=column2 from table
et, si j'ai ce tableau:
+---------+---------+
| column1 | column2 |
+---------+---------+
| value1 | value1 |
| value2 | value3 |
| value4 | value4 |
+---------+---------+
obtenir un résultat comme:
+---------+---------+-----------------+
| column1 | column2 | column1=column2 |
+---------+---------+-----------------+
| value1 | value1 | true |
| value2 | value3 | false |
| value4 | value4 | true |
+---------+---------+-----------------+
Quelle est la syntaxe correcte pour ce faire?
Si vous souhaitez également considérer l'égalité des valeurs nulles, essayez ce qui suit
select column1, column2,
case
when column1 is NULL and column2 is NULL then 'true'
when column1=column2 then 'true'
else 'false'
end
from table;
J'ai cessé d'utiliser DECODE
il y a plusieurs années car il n'est pas portable. En outre, il est moins flexible et moins lisible qu'un CASE/WHEN
.
Cependant, il existe une astuce intéressante que vous pouvez faire avec le décodage en raison de la façon dont il traite NULL. En décodage, NULL est égal à NULL. Cela peut être exploité pour savoir si deux colonnes sont différentes comme ci-dessous.
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