如何将测验应用场景下的两个SQL查询合并为单个查询?
解决方案
你需要合并三类测验的去重结果,不需要用JOIN,直接用UNION运算符合并两个查询的结果即可,UNION会自动对合并后的结果去重,符合你的展示需求。
注意你原有的第二个查询缺少当前用户的过滤条件,会返回所有用户的游玩记录,补充过滤条件后完整SQL如下:
SELECT quizid, title FROM ( -- 查询1:用户自己创作的测验 + 管理员发布的测验 SELECT quiz.quizid, quiz.title FROM quiz WHERE id = $1 OR id = 'admin' UNION -- 查询2:当前指定用户游玩过的去重测验 SELECT DISTINCT quiz.quizid, quiz.title FROM quiz INNER JOIN played ON quiz.quizid = played.quizid WHERE played.user_id = $1 ) AS all_quiz -- 可自行调整排序规则,此处按quizid倒序 ORDER BY quizid DESC
补充说明
- 如果你需要保留重复的测验记录,把
UNION替换成UNION ALL即可,常规测验展示场景下用UNION即可 - 如果后续需要给不同分类的测验加标识区分展示,可以在两个子查询里加自定义分类字段,比如第一部分加
type '创建/官方',第二部分加type '玩过',再配合排序逻辑可以实现分类展示效果
内容的提问来源于stack exchange,提问作者Searcher99
相关产品推荐
相关产品推荐

