You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按type_id分组查询关联表的问题与答案,且避免多表重复连接?

按type_id筛选问题并关联答案的SQL方案

数据表结构

questions表

id | question | type_id
1  | Q1       | 1
2  | Q2       | 3
3  | Q3       | 1
4  | Q4       | 2

answers表

id | answer 
1  | A1
2  | A2
3  | A3

questions_answers表

id | question_id | answer_id
1  | 1           | 1
2  | 2           | 3
3  | 3           | 1

需求与当前问题

需要筛选指定type_id的问题,并关联对应的答案,同时明确每个问题的归属类型。当前使用的查询仅按问题ID分组,无法区分type_id,也达不到筛选指定类型并展示对应问答的效果。

解决方案

不需要重复连接questions表,只需在查询中添加WHERE条件筛选type_id,同时选择需要展示的字段即可:

SELECT q.question, a.answer, q.type_id
FROM questions q
JOIN questions_answers qa ON qa.question_id = q.id
JOIN answers a ON qa.answer_id = a.id
WHERE q.type_id = 1;

执行结果

question | answer | type_id
Q1       | A1     | 1
Q3       | A1     | 1

如果不需要显示type_id,去掉对应字段即可得到目标结果:

SELECT q.question, a.answer
FROM questions q
JOIN questions_answers qa ON qa.question_id = q.id
JOIN answers a ON qa.answer_id = a.id
WHERE q.type_id = 1;

扩展说明

如果需要按type_id分组汇总(比如每个类型下的所有问答集合),可以配合GROUP_CONCAT实现:

SELECT q.type_id, GROUP_CONCAT(CONCAT(q.question, ':', a.answer) SEPARATOR '; ') AS qa_pairs
FROM questions q
JOIN questions_answers qa ON qa.question_id = q.id
JOIN answers a ON qa.answer_id = a.id
GROUP BY q.type_id;

内容的提问来源于stack exchange,提问作者mmdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:30:57