我有这个查询
SELECT r.id, r.name, r.code, rv.votes
FROM tbl_rhythms AS r
LEFT JOIN
(SELECT rhythm_id, votes
FROM tbl_songs_rhythms
WHERE song_id = 1
ORDER BY votes DESC) AS rv
ON r.id = rv.rhythm_id
...在MySQL 5.6.20中执行时返回此结果
3,Blues,blues, 2
4,Bollero,bollero, 1
1,Ballad,ballad, NULL
2,Slow,slow, NULL
5,Slow rocj,slowrock, NULL
6,Disco,disco, NULL
但是当我在MySQL 5.5.40-0ubuntu0.14.04.1
中执行相同的查询时1,Ballad,ballad, NULL
2,Slow,slow, NULL
3,Blues,blues, 2
4,Bollero,bollero, 1
5,Slow rock,slowrock, NULL
6,Disco,disco, NULL
如您所见,订单搞砸了。
这是MySQL 5.5.40的错误吗?
答案 0 :(得分:1)
您的问题有不同的结果,但随后您添加“订单搞砸了。”
这显然是正确的,因为外部查询没有order by
。而且,最外层 order by
中的select
确定了排序。你需要在那里下订单:
SELECT r.id, r.name, r.code, rv.votes
FROM tbl_rhythms r LEFT JOIN
tbl_songs_rhythms rv
ON r.id = rv.rhythm_id AND rv.song_id = 1
ORDER BY rv.votes DESC;
这也应该使查询更有效率,因为它没有实现子查询,它可以在tbl_songs_rhythms(rhythm_id)
join
上使用in dex。
至于为什么balad,balad
在一个案例中会NULL
而在另一个案例中会1
- 我认为这将是一个数据问题,与此结构无关查询。