Eu tenho o seguinte oracle SQL e seus trabalhos e tudo, mas é bastante feio com todos os or
s. Existe uma maneira mais concisa de fazer isso?
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
fonte
fonte
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
Em termos de uma limpeza pura de código, o seguinte parece mais limpo:
Dependendo do aplicativo e com que frequência a lógica será reutilizada, também pode valer a pena configurar uma tabela de pesquisa para aplicar a lógica:
fonte
Aqui está outra maneira de fazer isso. Usar o where (col1, col2) pode fazer com que o Oracle não use nenhum índice, mas isso parece uma tabela para a consulta, portanto, pode funcionar melhor. Você saberá quando testar as várias versões.
DBFiddle Here
fonte