Saya memiliki oracle SQL berikut dan karya-karyanya dan semua tapi itu cukup jelek dengan semua or
s. Apakah ada cara yang lebih ringkas untuk melakukan ini?
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
sumber
sumber
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
Dalam hal pembersihan kode murni, berikut ini terlihat lebih bersih:
Bergantung pada aplikasi dan seberapa sering logika akan digunakan kembali, mungkin perlu juga menyiapkan tabel pencarian untuk menerapkan logika:
sumber
Ini cara lain untuk melakukannya. Menggunakan where (col1, col2) dapat menyebabkan Oracle tidak menggunakan indeks apa pun, tetapi ini terlihat seperti tabel untuk kueri, sehingga mungkin berfungsi lebih baik. Anda akan tahu setelah Anda menguji berbagai versi.
DBFiddle Di Sini
sumber