У меня есть следующий SQL оракула и его работы и все, но это довольно уродливо со всеми or
с. Есть ли более краткий способ сделать это?
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
Кайл Деко
источник
источник
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
С точки зрения чистой очистки кода, следующее выглядит чище:
В зависимости от приложения и того, как часто логика будет использоваться повторно, может также стоить создать таблицу поиска для применения логики:
источник
Вот еще один способ сделать это. Использование where (col1, col2) может привести к тому, что Oracle не будет использовать какие-либо индексы, но это выглядит как таблица для запроса, поэтому она может работать лучше. Вы узнаете, как только вы протестируете различные версии.
DBFiddle Здесь
источник