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

求助:如何编写SQL查询获取两表组合后的唯一结果集?

解决问题:获取问题与选项的唯一组合

先给你最直接的可行方案,针对你要的「问题文本+选项文本无重复,同时保留每个问题的所有选项子集」需求,用DISTINCT配合表关联就能实现:

SELECT DISTINCT q.Text AS QuestionText, o.Text AS OptionText
FROM Questions q
JOIN Options o ON q.Id = o.QuestionId
ORDER BY q.Text, o.Text;

为什么这个能生效?

  • JOIN会把每个问题和它对应的所有选项关联起来;
  • DISTINCT会自动去除(QuestionText, OptionText)完全重复的行,只保留唯一组合;
  • 排序是为了让同一个问题的选项集中展示,方便查看。

如果习惯用GROUP BY,也可以这么写(效果和上面的DISTINCT一致):

SELECT q.Text AS QuestionText, o.Text AS OptionText
FROM Questions q
JOIN Options o ON q.Id = o.QuestionId
GROUP BY q.Text, o.Text
ORDER BY q.Text, o.Text;

注意必须同时按问题文本和选项文本分组,如果只按问题分组,会导致每个问题只返回一条选项,这应该是你之前用GROUP BY失败的原因。

额外场景:保留无选项的问题

如果你的数据库里存在没有对应选项的问题,且需要把这些问题也保留在结果里,把JOIN改成LEFT JOIN即可:

SELECT DISTINCT q.Text AS QuestionText, o.Text AS OptionText
FROM Questions q
LEFT JOIN Options o ON q.Id = o.QuestionId
ORDER BY q.Text, o.Text;

此时无选项的问题对应的OptionText会显示为NULL。

可能的坑

如果你的数据库里Text是关键字(比如SQL Server、MySQL里),需要用反引号或方括号把字段名括起来,比如MySQL用q.Text``,SQL Server用q.[Text],避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:45:01