2017-02-27 83 views
0

我有一个包含子查询和许多左外连接的查询。在我的子查询中,我按最近的blog_date的记录排序,并将结果限制为10条记录。这个子查询应该规定记录的顺序,其他连接匹配关于该记录的附加信息,但是,当我添加LEFT OUTER JOIN时,它忽略了blog_date排序。这使我相信我要么缺少坚持订购的关键要素,要么认为LEFT OUTER JOIN不是正确的连接方式。SQL左外连接影响子查询顺序

这里是我完整的查询:

SELECT `b`.`blog_id`, `b`.`blog_date`,`b`.`title`, `u`.`user_id`, `u`.`first_name`, `c`.`category_name`, `d`.`discovery_source_name`, `bc`.`comment`, `bf`.`file` 
FROM (SELECT * FROM `blog` ORDER BY `blog`.`blog_date` DESC limit 10) `b` 
LEFT OUTER JOIN `user` `u` ON `b`.`user_id` = `u`.`user_id` AND `u`.`organization_id` = 1 
LEFT OUTER JOIN `category` `c` ON `b`.`category_id` = `c`.`category_id` 
LEFT OUTER JOIN `discovery_source` `d` ON `b`.`discovery_source_id` = `d`.`discovery_source_id` 
LEFT OUTER JOIN `blog_comment` `bc` ON `b`.`blog_id` = `bc`.`blog_id` 
LEFT OUTER JOIN `blog_file` `bf` ON `b`.`blog_id` = `bf`.`blog_id` 
; 

下面是结果,当我刚刚有第一个连接(user)记录是正确的顺序(2017年2月21日最新) :

correct query

然而,当我在第二个左外连接添加(和剩余)就看起来新订单在下降blog_date订单,但随后按category_name分组。

incorrect order

回答

1

订购子查询中有你的外部查询的顺序没有任何影响。将ORDER BY放在外部查询的末尾。

SELECT `b`.`blog_id`, `b`.`blog_date`,`b`.`title`, `u`.`user_id`, `u`.`first_name`, `c`.`category_name`, `d`.`discovery_source_name`, `bc`.`comment`, `bf`.`file` 
FROM (SELECT * FROM `blog` ORDER BY `blog`.`blog_date` DESC limit 10) `b` 
LEFT OUTER JOIN `user` `u` ON `b`.`user_id` = `u`.`user_id` AND `u`.`organization_id` = 1 
LEFT OUTER JOIN `category` `c` ON `b`.`category_id` = `c`.`category_id` 
LEFT OUTER JOIN `discovery_source` `d` ON `b`.`discovery_source_id` = `d`.`discovery_source_id` 
LEFT OUTER JOIN `blog_comment` `bc` ON `b`.`blog_id` = `bc`.`blog_id` 
LEFT OUTER JOIN `blog_file` `bf` ON `b`.`blog_id` = `bf`.`blog_id` 
ORDER BY `b`.`blog_date` DESC ; 
+0

感谢您的明确! – cphill