如果我不使用 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,
);
答案 0 :(得分:0)
在您的查询中,您使用GROUP BY
。正确的用法是,SELECT
子句中的每一列都必须出现在GROUP BY
子句中(当然,如果指定),或者必须在其上应用聚合函数。不幸的是,MySQL(我认为它是唯一能做到这一点的DBMS)允许这样做,尽管它可能会导致错误的结果。顺便说一下,您可以将ONLY_FULL_GROUP_BY
设为sql_mode
来关闭此功能。
无论如何,正在发生的事情是,每个组中的行“折叠”为每组一行。如果您没有应用MIN()
或MAX()
等聚合函数,则会显示该组的随机行。在您的情况下,这是具有NULL
值的行。