order by导致select查询返回null值

时间:2015-10-19 18:04:47

标签: mysql sql

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

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

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,
); 

1 个答案:

答案 0 :(得分:0)

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

无论如何,正在发生的事情是,每个组中的行“折叠”为每组一行。如果您没有应用MIN()MAX()等聚合函数,则会显示该组的随机行。在您的情况下,这是具有NULL值的行。