Mysql GROUP_CONCAT在查询的IN()中使用GROUP_CONCAT

时间:2014-02-11 10:41:27

标签: mysql group-concat

我有一个问题:

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个商店名称的串联。

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

感谢。

2 个答案:

答案 0 :(得分:0)

避免在子查询中执行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

答案 1 :(得分:-1)

试试这个

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
);