Tengo el siguiente Oracle SQL y sus trabajos y todo, pero es bastante feo con todos los or
s. ¿Hay una manera más concisa de hacer esto?
SELECT * FROM foobar WHERE
(SUBJECT ='STAT' and TERM ='111') or
(SUBJECT ='STAT' and TERM ='222') or
(SUBJECT ='ENGLISH' and TERM ='555') or
(SUBJECT ='COMM' and TERM ='444') or
(SUBJECT ='COMM' and TERM ='333') or
(SUBJECT ='STAT' and TERM ='666')
...
oracle
query-refactor
Kyle Decot
fuente
fuente
SELECT * FROM foobar INNER JOIN (SELECT * FROM (VALUES ('4','a'),('5','b')) AS myTable(subject,term)) ON myTable.subject=foobar.table and mytable.term=foobar.term
En términos de una limpieza de código puro, lo siguiente se ve más limpio:
Dependiendo de la aplicación y con qué frecuencia se reutilizará la lógica, también puede valer la pena configurar una tabla de búsqueda para aplicar la lógica:
fuente
Aquí hay otra forma de hacerlo. El uso de where (col1, col2) puede hacer que Oracle no use ningún índice, pero esto parece una tabla para la consulta, por lo que podría funcionar mejor. Lo sabrá una vez que pruebe las diferentes versiones.
DBFiddle Here
fuente