当数据库中存在多个id对应相同描述文本的情况时,可通过group by配合聚合函数(如min或max)选取唯一id,确保下拉框中每个文本仅出现一次。
在实际开发中,尤其是构建下拉选择控件(如ComboBox)时,常需从数据库中提取“文本-值”对(即 text 显示项与 id 绑定值)。但若原始表(如 engine)中存在多条记录具有相同 description 却不同 id(例如同义词、历史冗余数据或录入重复),直接使用 SELECT DISTINCT id, description 并不能解决去重问题——因为 DISTINCT 是对整行生效的,只要 id 不同,即使 description 相同也会被全部返回。
✅ 正确做法是:按 description 分组,并为每组选取一个代表性的 id。推荐使用聚合函数 MIN(id) 或 MAX(id),它们语义清晰、性能稳定,且能确保结果确定性:
SELECT MIN(id) AS id, description AS text FROM engine WHERE description IS NOT NULL GROUP BY description;
⚠️ 注意事项:
? 扩展建议:
若未来需支持多语言或动态排序,可考虑在应用层做二次去重(如 Java Stream 的 Collectors.toMap),但优先推荐在数据库层完成——既减少网络传输量,又保证数据一致性。最终该查询结果可直连 ComboBox 的 DataSource,实现简洁、高效、无
重复的用户选项展示。