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

多表查询求助:如何筛选fk_category_id=2的关联品牌?

问题解析与解决方案

原SQL的问题点

  1. 返回列不符合预期:原语句SELECT了m.name, m.id, p.fk_category_id三个字段,而预期结果只需要品牌的id和name,多余的p.fk_category_id导致结果列不匹配。
  2. 未处理重复记录:如果同一品牌关联多个符合条件的产品,原语句会返回多条相同的品牌记录,不符合“获取所有关联品牌”的去重需求。
  3. 连接条件写法不规范:将表关联条件p.fk_marque_id = m.id放在WHERE子句中,虽然部分数据库允许运行,但不符合SQL标准写法,降低了代码可读性和维护性。

修正后的SQL语句

方案1:使用DISTINCT去重

SELECT DISTINCT m.id, m.name
FROM produits p
INNER JOIN manufacturers m ON p.fk_marque_id = m.id
WHERE p.fk_category_id = 2
  AND p.is_active = 1
  AND p.is_delete = 0;

方案2:使用GROUP BY去重

SELECT m.id, m.name
FROM produits p
INNER JOIN manufacturers m ON p.fk_marque_id = m.id
WHERE p.fk_category_id = 2
  AND p.is_active = 1
  AND p.is_delete = 0
GROUP BY m.id, m.name;

修正说明

  • 指定连接条件:用ON子句明确produits表的fk_marque_id与manufacturers表的id的关联关系,逻辑更清晰,符合SQL编码规范。
  • 精简返回字段:仅选择m.id和m.name,与预期结果的列完全匹配。
  • 去重处理:通过DISTINCT或GROUP BY确保每个品牌仅返回一条记录,避免重复数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:25:18