【问题标题】:SQL GROUP_CONCAT with LEFT JOIN to multiple relative rowsSQL GROUP_CONCAT 与 LEFT JOIN 到多个相关行
【发布时间】:2016-04-22 04:25:09
【问题描述】:

我已经坚持了好几个小时了,任何帮助将不胜感激

我有两个表 'products' 和 'product_subcategorys'

'products' 仅包含唯一 id,而 'product_subcategorys' 包含相对于 'products' 表的多个 id

'products'
id   brand
1    a
2    b
3    a

'product_subcategorys'
id   subcat
1    u
1    i
2    u
3    u

这是我的查询,按“p.id”分组似乎不起作用

SELECT GROUP_CONCAT(p.brand)
FROM products p
LEFT JOIN product_subcategorys s ON p.id = s.id
WHERE (
        s.subcategory = "u"
        OR s.subcategory = "i"
        ) AS GROUPbrand

所以我的问题是,我希望它只从“产品”表中返回品牌列表,因为我需要计算倍数

我希望查询返回品牌“a”两次,但此查询返回 3 次,因为“product_subcategorys”中有两个匹配的 id

【问题讨论】:

  • 编辑您的问题并添加您想要的结果。请注意,您指定的查询仅返回一行,所以我不知道您所说的“此查询返回 3 次”是什么意思。
  • 你需要计算倍数。这些应该是多行,还是需要数​​字计数?
  • 当我得到'a,a,b,a'时,我需要返回行,例如'a,b,a'

标签: mysql sql


【解决方案1】:

这是你想要的吗?

SELECT GROUP_CONCAT(p.brand ORDER BY p.id)
FROM products p
WHERE EXISTS (SELECT 1
              FROM product_subcategorys s 
              WHERE p.id = s.id AND
                    s.subcategory IN ('u', 'i')
             );

【讨论】:

  • 非常感谢!抱歉,我花了这么长时间来测试它,因为它是我在整个地方都进行了调整的长查询的一部分。不过,它似乎在起作用!
猜你喜欢
  • 2014-07-30
  • 2014-07-19
  • 2010-09-29
  • 1970-01-01
  • 2011-05-26
  • 2021-11-27
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多