Mam następujący Oracle SQL i jego działa i wszystko, ale jest dość brzydkie ze wszystkimi or
s. Czy istnieje bardziej zwięzły sposób na zrobienie tego?
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
źródło
źródło
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
Jeśli chodzi o czyste czyszczenie kodu, następujące elementy wyglądają na czystsze:
W zależności od aplikacji i tego, jak często logika będzie ponownie wykorzystywana, warto również ustawić tabelę odnośników, aby zastosować logikę:
źródło
Oto inny sposób, aby to zrobić. Użycie where (col1, col2) może spowodować, że Oracle nie użyje żadnych indeksów, ale wygląda to jak tabela zapytania, więc może działać lepiej. Dowiesz się, gdy przetestujesz różne wersje.
DBFiddle Here
źródło