在用于缩小 concat 结果的 GROUP CONCAT 子查询中找不到表别名
Posted
技术标签:
【中文标题】在用于缩小 concat 结果的 GROUP CONCAT 子查询中找不到表别名【英文标题】:Table alias not found in GROUP CONCAT sub-query used to narrows down concat results 【发布时间】:2021-06-28 10:12:35 【问题描述】:我正在尝试创建一个查询,在附加列中列出每个用户和用户的 transactionId。 每个用户可以有多个事务,其中 User.userId = Transaction.userId。当我使用下面的查询时,我收到一个错误,它无法识别用户的别名 U1:
错误代码:1054。“where 子句”中的未知列“U1.userId”
子查询 sub1 用于缩小将由 GROUP_CONCAT 连接的结果。
在 GROUP_CONCAT 的子子查询中,有一些类似的问题涉及未找到的别名,但没有一个别名。
SELECT
*,
(
SELECT
GROUP_CONCAT(transactionId SEPARATOR ',')
FROM (
SELECT * FROM Transaction AS T1
WHERE T1.userId = U1.userId
) as sub1
) as transactionIds
FROM
User as U1
有谁知道如何达到预期的效果?用户行以及汇总用户事务 ID 的附加列。
【问题讨论】:
【参考方案1】:不需要子查询。
SELECT
*,
(
SELECT
GROUP_CONCAT(transactionId SEPARATOR ',')
FROM Transaction AS T1
WHERE T1.userId = U1.userId
) as transactionIds
FROM
User as U1
我已经包含了子查询,因为我正在寻找一种方法来限制结果,以防我不需要所有的 id。
SELECT
*,
(
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(transactionId ORDER BY transactionId SEPARATOR ','), ',', needed_amount)
FROM Transaction AS T1
WHERE T1.userId = U1.userId
) as transactionIds
FROM
User as U1
不要忘记将@@group_concat_max_len
调整为合理但足够的值。
【讨论】:
这似乎可以解决问题,我已经包含了子查询,因为我正在寻找一种方法来限制结果,以防我不需要所有的 id。此解决方案取自 ***.com/a/44926956/2099823。这是否意味着您可以只使用 LIMIT 而不使用子查询? @Gijs 已更新。使用needed_amount
代替 LIMIT。此外,它可以不是常量,而是用户定义的变量,甚至是表达式(在不同的行中给出不同的 ID 数量)。以上是关于在用于缩小 concat 结果的 GROUP CONCAT 子查询中找不到表别名的主要内容,如果未能解决你的问题,请参考以下文章