繁体   English   中英

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

[英]Mysql GROUP_CONCAT using a GROUP_CONCAT in the query's IN()

我有一个查询:

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

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

谢谢。

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

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM