Kyl*_*cot 13 oracle query-refactor
我有以下 oracle SQL 及其作品,但所有or
s都很丑陋。有没有更简洁的方法来做到这一点?
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')
...
Run Code Online (Sandbox Code Playgroud)
Jac*_*las 21
你可能更喜欢这样的事情:
select *
from foobar
where (subject,term) in ( ('STAT','111')
,('STAT','222')
,('ENGLISH','555')
,('COMM','444')
,('COMM','333')
,('STAT','222')
,('STAT','666')
);
Run Code Online (Sandbox Code Playgroud)
DBFiddle在这里
Tho*_*erg 11
在纯代码清理方面,以下内容看起来更清晰:
SELECT *
FROM foobar
WHERE (SUBJECT = 'STAT' and TERM IN ('111','222','666') )
OR (SUBJECT = 'COMM' and TERM IN ('333','444') )
OR (SUBJECT = 'ENGLISH' and TERM = '555' ) ;
Run Code Online (Sandbox Code Playgroud)
根据应用程序和重用逻辑的频率,设置一个查找表来应用逻辑也可能是值得的:
CREATE TABLE foobar_lookup (SUBJECT VARCHAR2(7), TERM VARCHAR2(3)) ;
INSERT INTO foobar_lookup SELECT 'STAT', '111' FROM dual ;
INSERT INTO foobar_lookup SELECT 'STAT', '222' FROM dual ;
INSERT INTO foobar_lookup SELECT 'STAT', '666' FROM dual ;
INSERT INTO foobar_lookup SELECT 'COMM', '444' FROM dual ;
INSERT INTO foobar_lookup SELECT 'COMM', '333' FROM dual ;
INSERT INTO foobar_lookup SELECT 'ENGLISH', '555' FROM dual ;
SELECT f.* FROM foobar f
JOIN foobar_lookup fl
ON fl.subject = f.subject
AND fl.term = f.term ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2484 次 |
最近记录: |