Concatenar campos en la sentencia IN() con Oracle (SQL)
Vamos a ver un «truco» para trabajar con la sentencia IN().
Pongamos un ejemplo sencillo para ver dos formas de realizar un proceso con el mismo resultado:
Digamos que en un colegio hay dos clases con diferentes alumnos.
Clase 1 (La llamamos A)
Nombres alumnos:
- Lucia
- Patricia
- Iván
Clase 2 (La llamamos B)
Nombres alumnos:
- Sara
- Esther
- Rafa
Si quisiéramos obtener los nombres masculinos de las dos clases, entonces una opción sería realizarlo de la siguiente manera:
SELECT nombreAlumno FROM clase WHERE (nombreAlumno = 'Iván' AND nombreClase = 'A') OR (nombreAlumno = 'Rafa' AND nombreClase = 'B') |
Una de las formas que tiene Oracle para concatenar campos es ||»||, que es la que vamos a usar a continuación.
Ahora bien, para hacerlo con la sentencia de SQL IN() en Oracle se realizaría de la siguiente manera:
SELECT nombreAlumno FROM clase WHERE nombreAlumno||'-'||nombreClase IN('Iván-A', 'Rafa-B') |
Una forma incorrecta de usar la sentencia IN() hubiera sido incluir varias, ya que los datos podrías salir de mezclados entre los dos grupos que abarca la sentencia IN:
SELECT nombreAlumno FROM clase WHERE nombreAlumno IN('Iván','Rafa') AND nombreClase IN('A', 'B') |