作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题,但我似乎还没有找到答案(虽然我已经解决了真正的问题)。
我有一个相当大的查询,可以正常工作.. 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" ;)
这个子查询返回给我的行数超过 1 行,但我不明白是怎么回事。
我必须提到我删除了表名,并且 JOINS 或其他语法错误没有问题。
这个问题的解决方案是添加一个
GROUP BY cal_id_user
在 IF 条件内的两个 SELECTS 中。
有人可以向我解释一下这个问题是如何发生的吗?不幸的是,我没有找到此类问题的确切答案。
感谢您的宝贵时间。
最佳答案
问题在于 MySQL 允许您使用没有 GROUP BY 子句的聚合函数,这是疯狂的。如果没有 GROUP BY,您的查询可以在 MySQL 中运行,但这并不意味着它是正确的。 (在 MSSQL 中尝试一下,您就会看到。)
关于mysql - Bug - SELECT GROUP_CONCAT 如何在子查询中返回多于 1 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12086400/
我是一名优秀的程序员,十分优秀!