在用于缩小 concat 结果的 GROUP CONCAT 子查询中找不到表别名

时间:2021-04-01 11:57:00

标签: mysql

我正在尝试创建一个查询,在附加列中列出每个用户和用户的事务 ID。 每个用户可以有多个事务,其中 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 个答案:

答案 0 :(得分: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 调整为合理但足够的值。

相关问题