SQL 求助,如何同时搜索两列数据的多种情况?

2022-05-26 04:25:36 +08:00
 Richard14

业务上有一张表示对象分科目成绩的表,大概结构就是 主键自增 ID 、科目名,科目成绩,对象 ID 这四项,业务上搜索需要搜索,比如“搜索科目 1 成绩为 90,91,92,93,94,95 的所有对象 ID”

SQL 目前是按下面这样写的

SELECT objid FROM SCOTT.SCORES WHERE subject = 1 AND score IN (90,91,92,93,94,95) 

但是遇到如果需要同时搜索不同科目的话,比如同时对科目 1 的成绩和科目 2 的成绩有要求,就需要拆成多个搜索语句,目前是这么写的

SELECT DISTINCT objid FROM (
    SELECT objid FROM SCOTT.SCORES WHERE subject = 1 AND score IN (90,91,92,93,94,95)
    UNION
    SELECT objid FROM SCOTT.SCORES WHERE subject = 2 AND score IN (60,70,90)
    UNION
    SELECT objid FROM SCOTT.SCORES WHERE subject = 3 AND score IN (75,85)
) AS tmp

感觉非常麻烦,请问有什么放到一句话里的写法吗?

目前是在表里针对 subject 的值进行了分区,然后对 subject 和 score 建立了一个联合的普通索引,性能上还有能优化的地方吗?谢谢大家

1358 次点击
所在节点    数据库
2 条回复
tuutoo
2022-05-26 06:23:15 +08:00
where (subject = 1 AND score IN (90,91,92,93,94,95))
or
(subject = 2 AND score IN (60,70,90))
or
(subject = 3 AND score IN (75,85))
onhao
2022-05-26 10:24:44 +08:00
可以用 group_concat ,把满足条件的做标记,然后再通过对应的标记做分组 https://wuhao.pw/archives/161/
@ Richard14

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855340

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX