如果我不使用 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/