42 votes

Comment sélectionner la comparaison de deux colonnes comme une seule colonne dans Oracle ?

Je ne parviens pas à trouver comment ajouter à ma requête SELECT une colonne indiquant si deux colonnes contiennent les mêmes données dans Oracle.

Je voudrais écrire une requête du genre :

select column1, column2, column1=column2 from table

et, si j'ai cette table :

+---------+---------+
| 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 faire cela ?

70voto

vc 74 Points 15694

Si vous voulez é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;

13voto

Ronnis Points 7736

J'ai arrêté d'utiliser DECODE il y a plusieurs années parce qu'il n'est pas portable. De plus, il est moins flexible et moins lisible qu'un CASE/WHEN .

Cependant, il y a une astuce que vous pouvez faire avec decode en raison de la façon dont il traite NULL. Dans decode, NULL est égal à NULL. Cela peut être exploité pour dire 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

7voto

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

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X