2017-02-27 70 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