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

SQL多表查询如何获取指定分类下不重复的关联品牌信息

问题原因

你当前语句返回重复品牌的核心原因是:一个品牌下可能存在多件cat_id = 11的产品,产品表和品牌表关联后,每件产品都会生成一条关联记录,所以同一个品牌会对应多条结果出现重复。

解决方案

提供两种常用实现方式,可根据你的数据规模选择:

方案1:追加DISTINCT直接去重(适合小数据量,改动最小)

直接在查询字段前加DISTINCT,即可对返回的品牌记录做去重处理:

SELECT DISTINCT b.id, b.name, b.media_file
FROM wo_products p
LEFT JOIN wo_companies b
    ON p.brand = b.id
WHERE p.cat_id = 11 -- 若你的产品表分类字段实际为category可保留原写法
  AND user_id = 1 -- 保留你原有的业务过滤条件
ORDER BY b.id ASC

注意:你原语句按p.id DESC排序,去重后产品id已经失去聚合意义,建议调整为按品牌id/名称排序更合理。

方案2:用EXISTS子查询实现(适合大数据量,性能更优)

该方案逻辑更贴合你的需求本质:直接查询品牌表,仅筛选出「存在分类为11的关联产品」的品牌,不需要关联后再去重,执行效率更高:

SELECT id, name, media_file
FROM wo_companies b
WHERE EXISTS (
    SELECT 1 
    FROM wo_products p 
    WHERE p.brand = b.id 
      AND p.cat_id = 11
      AND p.user_id = 1 -- 保留原有业务过滤条件
)
ORDER BY id ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:27:00