mysql - order by 导致 select 查询返回空值

标签 mysql sql

如果我不使用 ORDER BY CLAUSE,下面的 mysql 查询将完美运行。

但是,一旦我在选择中插入 order by 以按 pictureRating 返回值(即具有最高质量图片的用户),则查询将停止返回所有值.例如,它停止从语句表返回任何值。

SELECT u.id,st.message,ph.image
FROM user u  
LEFT OUTER JOIN statement st ON u.id = st.id
LEFT OUTER JOIN photosGallery ph ON u.id = ph.userId
WHERE u.live = 1 
GROUP BY u.id 
ORDER BY u.pictureRating DESC 

表格是:

用户。

 CREATE TABLE users(
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
pictureRating smallint(6) NULL, 

); 

相册

CREATE TABLE photosGallery(
id MEDIUMINT UNSIGNED NOT NULL, 
image  VARCHAR(30) NULL
); 

声明

CREATE TABLE statement (
id MEDIUMINT UNSIGNED NOT NULL,
message VARCHAR (60) NULL,
); 

最佳答案

在您的查询中,您使用 GROUP BY。正确的用法是,SELECT 子句中的每一列都必须出现在 GROUP BY 子句中(当然,如果指定的话),或者聚合函数必须是应用于它。不幸的是,MySQL(我认为它是唯一一个这样做的 DBMS)允许这样做,尽管它可能导致错误的结果。顺便说一句,你可以通过设置 ONLY_FULL_GROUP_BY 来关闭它。作为sql_mode .

无论如何,实际情况是,每组中的行“折叠”为每组一行。如果您没有应用 MIN()MAX() 之类的聚合函数,则会显示该组的随机行。在您的例子中,这是具有 NULL 值的行。

关于mysql - order by 导致 select 查询返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221027/

相关文章:

sql - 如何从没有键的表中检索非重复记录?

php - 将用户详细信息与 HTML 一起包含在我的数据库中

php - 为 MySQL 查询添加延迟或暂停以确保安全

php - MySQL select语句给出错误

php - 保存 PHP 之前图像的唯一名称

mysql - 如何检查列值是否不为空,然后使用 sql 查询检查下一列

sql - 如何声明数组的元素不可为空?

sql - 使用 Sequel 更新后如何获取受影响的行数?

C# 查询命令 SQL 带引号

Mysql Bulk update performance improvements for (when.. case)