【问题标题】:Mysql GROUP_CONCAT using a GROUP_CONCAT in the query's IN()Mysql GROUP_CONCAT 在查询的 IN() 中使用 GROUP_CONCAT
【发布时间】:2014-03-09 02:27:21
【问题描述】:

我有一个问题:

SELECT GROUP_CONCAT(stores.store_name)
FROM stores
WHERE stores.id IN
(

  SELECT
  GROUP_CONCAT(users_x_stores.store_id) as stores_list
  FROM users_x_stores
  WHERE users_x_stores.user_id = 4

 );

子查询在单独运行时返回一个包含 3 个结果的 group_concat - 14、4、8。

ID 14、4、8 有对应的行 - 但整个查询只返回一个商店名称。

如果我将子查询更改为简单的 14、4、8,则整个查询将正常工作,并返回 3 个商店名称的串联。

谁能告诉我我在这里做错了什么?

谢谢。

【问题讨论】:

  • 相信你想去掉第二个GROUP_CONCAT(...)函数:select users_x_stores.store_id as stores_list ...
  • 你试过没有 GROUP_CONCAT 的子查询吗?我相信外部 IN 可以接受查询结果以及逗号分隔的列表。
  • Phylogenisis - 不错,这就是答案,现在工作正常。我对我的 GROUP_CONCAT 过于热心了。

标签: mysql group-concat


【解决方案1】:

避免在子查询上执行 IN,您可能可以使用 JOIN。

假设 users_x_stores.store_id 包含该用户的单个商店 ID(users_x_stores 上的另一行用于同一用户的不同商店):-

SELECT GROUP_CONCAT(stores.store_name)
FROM stores
INNER JOIN users_x_stores
ON stores.id = users_x_stores.store_id
WHERE users_x_stores.user_id = 4

如果 sers_x_stores.store_id 是一个逗号分隔的商店列表(不是一个好的表格设计,可能不是您所做的,但在您的原始帖子中不清楚)那么您可以这样做

SELECT GROUP_CONCAT(stores.store_name)
FROM stores
INNER JOIN users_x_stores
ON FIND_IN_SET(stores.id, users_x_stores.store_id)
WHERE users_x_stores.user_id = 4

【讨论】:

    【解决方案2】:

    试试这个

    SELECT GROUP_CONCAT(stores.store_name)
    FROM stores
    WHERE stores.id IN
    (
    SELECT
    users_x_stores.store_id as stores_list
    FROM users_x_stores
    WHERE users_x_stores.user_id = 4
    ); 
    

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 2012-07-28
      • 1970-01-01
      • 2012-10-24
      • 2018-05-12
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多