gpt4 book ai didi

mysql - 在左侧选择 group_concat 与 group_concat 加入

转载 作者:行者123 更新时间:2023-11-29 00:26:13 30 4
gpt4 key购买 nike

我正在分析一些查询,并在尝试根据 user_id 从不同的表中提取多个字段时注意到一些有趣的结果。考虑下表:

+------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------+------+-----+---------+----------------+
| subscription_id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(11) unsigned | YES | MUL | NULL | |
| expires | int(11) unsigned | YES | MUL | NULL | |
| created | int(11) unsigned | YES | MUL | NULL | |
| modified | int(11) | YES | | NULL | |
+------------------------+------------------+------+-----+---------+----------------+

我想在获取用户时GROUP_CONCAT 一个用户的所有订阅。目前这种方法适用于一个领域:

SELECT u.id,
(
SELECT GROUP_CONCAT(s.subscription_id)
FROM subscriptions s
WHERE s.user_id = u.id
) AS subscription_ids
FROM users u
LIMIT 10

而且我可以添加具有不同 SELECT GROUP_CONCAT 的所有字段。然而,由于 MySQL 为每个字段加入了 subscriptions 表,因此对于任何实际行数,此方法非常慢。有没有一种方法可以在列出用户时同时 GROUP_CONCAT 所有字段?

我尝试了一个LEFT JOIN方法:

SELECT
u.id AS user_id,
GROUP_CONCAT(s.subscription_id) AS subscription_ids
FROM users u
LEFT JOIN subscriptions s
ON s.user_id = u.id
LIMIT 10

但是,这似乎连接了 所有 的 subscription_id。我有点困惑为什么 LEFT JOIN 会那样做。但我很惊讶似乎没有一种简单的方法来连接来自不同表的字段列表。

最佳答案

GROUP_CONCAT 是一个聚合函数,因此需要使用 GROUP BY 子句。

SELECT
u.id AS user_id, GROUP_CONCAT(s.subscription_id) AS subscription_ids
FROM
users u
LEFT JOIN subscriptions s ON s.user_id = u.id
GROUP BY
u.id
LIMIT 10

关于mysql - 在左侧选择 group_concat 与 group_concat 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18804765/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com