【问题标题】:MySQL JOIN / GROUP_CONCAT second table?MySQL JOIN / GROUP_CONCAT 第二张表?
【发布时间】:2013-01-23 14:56:51
【问题描述】:

所以我有这个完美的查询:

SELECT users.*,
GROUP_CONCAT(categories.category_name) AS categories
FROM users
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10;

假设我有另一个包含电话号码的表,对于“用户”,用户可以拥有任意数量的电话号码......我将如何围绕类别做与我正在做的完全相同的事情?换句话说,我想获得另一列,其中包含在“phones”表中找到的具有相同“user_id”的所有 phone_numbers 并将它们连接在一起(phone1、phone2、phone3)?我试过了:

SELECT users.*,
GROUP_CONCAT(phones.phone_number) AS phone_numbers,
GROUP_CONCAT(categories.category_name) AS categories
FROM users
LEFT OUTER JOIN phones ON users.user_id = phones.user_id
LEFT OUTER JOIN user_categories ON users.user_id = user_categories.user_id
LEFT OUTER JOIN categories ON user_categories.category_id = categories.category_id
WHERE users.user_city = 'brooklyn'
GROUP BY users.user_id
LIMIT 10;

没有运气......或者至少查询执行了,但它做了一些奇怪的重复事情......任何帮助都会很棒!

谢谢!

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    它做了一些奇怪的事情,因为某些行有一个叉积。您可以使用 DISTINCT 关键字来获取唯一的电话号码:

    GROUP_CONCAT(DISTINCT phones.phone_number) AS phone_numbers,
    

    检查documentation。或者,您可以在另一个查询中获取电话号码,在该查询中您将只选择具有类似 WHERE phones.user_id IN (x, x, x, ...) 的条件的电话号码(x 是从第一个查询返回的 ID)。

    【讨论】:

    • 好的,这按预期工作......只是想注意,有必要在两个 GROUP_CONCATS 中使用 DISTINCT
    【解决方案2】:

    这发生在我身上,后来我不得不将我的查询更改为这个。

    SELECT 
       ( SELECT GROUP_CONCAT(`partnumber`) FROM `product_partnumber` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `partnumbers`,
       ( SELECT GROUP_CONCAT(`oem`) FROM `product_oem` AS `n` WHERE `p`.`id`=`n`.`product_id`) as `oems`
    FROM `product` AS `p`
    

    所以我不得不使用子查询,否则我有重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2013-03-02
      • 2012-07-28
      • 2014-10-31
      • 1970-01-01
      相关资源
      最近更新 更多