Ich habe das folgende Orakel SQL und seine Arbeiten und alle, aber es ist mit allen or
s ziemlich hässlich . Gibt es eine präzisere Möglichkeit, dies zu tun?
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
quelle
quelle
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
In Bezug auf eine reine Codebereinigung sieht Folgendes sauberer aus:
Abhängig von der Anwendung und wie oft die Logik wiederverwendet wird, kann es auch sinnvoll sein, eine Nachschlagetabelle einzurichten, um die Logik anzuwenden:
quelle
Hier ist eine andere Möglichkeit, dies zu tun. Die Verwendung von where (col1, col2) kann dazu führen, dass Oracle keine Indizes verwendet. Dies sieht für die Abfrage jedoch wie eine Tabelle aus, sodass es möglicherweise besser funktioniert. Sie werden es wissen, sobald Sie die verschiedenen Versionen getestet haben.
DBFiddle hier
quelle