web-dev-qa-db-fra.com

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

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?

34
Vito De Tullio

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;
60
vc 74

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  
11
Ronnis
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;

HTH

6
Zsolt Botykai