【问题标题】:Bug - How can SELECT GROUP_CONCAT return more than 1 row in subquery?错误 - SELECT GROUP_CONCAT 如何在子查询中返回多于 1 行?
【发布时间】:2012-08-23 07:05:39
【问题描述】:

我有一个问题,但我似乎还没有找到答案(我已经解决了真正的问题)。

我有一个相当大的查询,可以正常工作 .. 3-4 个月,然后通过添加项目和在应用程序中工作进行一些更改后,带有 group_concat 的子查询返回超过 1 行,我指出 group_concat 的点是在 1 行中连接所有项目?!

简化的查询是这样的:

(SELECT * FROM (SELECT id,
             (other_selects),
    (SELECT GROUP_CONCAT(' ',IF(user_nume IS NOT NULL, (
                    SELECT CONCAT(user_nume,' ',user_prenume)
                    FROM table
                    WHERE u2.user_id = cal_id_user
                    AND i1.cai_id = cal_id_imobil
                    ), (
                        SELECT user_company
                        FROM table
                        WHERE u2.user_id = cal_id_user
                        AND i1.cai_id = cal_id_imobil
                        ) ))
    FROM table2 u2) as locatari,
    ( other selects )   
    .........................
    FROM table3 i1
    ...... JOINS ............
GROUP BY cai_id
ORDER BY cai_id DESC)t" ;)

这个 subqery 返回给我的行数超过 1 行,我不明白如何。

不得不提的是,我删除了表名,在 JOINS 或其他 sintax 错误上没有问题。

这个问题的解决方案是添加一个

GROUP BY cal_id_user

在 IF 条件内的两个 SELECTS 中。

有人可以向我解释一下这个问题是怎么可能的吗?不幸的是,我没有找到此类问题的确切答案。

感谢您的宝贵时间。

【问题讨论】:

    标签: mysql subquery group-concat


    【解决方案1】:

    问题在于 MySQL 允许您在没有 GROUP BY 子句的情况下使用聚合函数,这太疯狂了。如果没有 GROUP BY,您的查询可以在 MySQL 中运行,但这并不意味着它是正确的。 (在 MSSQL 中试试这个,你会看到。)

    【讨论】:

    • 是的,但是如果我创建一个 SELECT GROUP_CONCAT(id) FROM 表,我总是会返回 1 行与该列中的连接值,因此它永远不会返回超过 1 行有或没有 GROUP BY .如果我只想要不同的值,我会使用 DISTINCT。
    • 在您的子查询中使用 MAX(id) 您不必进行其他更改,这将选择最后一行
    • 我不明白为什么我需要最后一行。
    猜你喜欢
    • 2014-02-15
    • 2021-07-14
    • 2017-05-29
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多