我有一个问题:
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个商店名称的串联。
有谁能告诉我这里做错了什么?
感谢。
答案 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
);