[英]SQL Left Outer Join Affecting Sub Query Order
我有一個包含子查詢和許多左外部聯接的查詢。 在我的子查詢中,我按最新的blog_date
的記錄排序,並將結果限制為10條記錄。 該子查詢應指示記錄的順序,其他聯接匹配有關該記錄的其他信息,但是,當我在LEFT OUTER JOIN
添加時,它會忽略blog_date
順序。 這使我相信我要么缺少保持訂單的關鍵要素,要么認為LEFT OUTER JOIN
不是要使用的正確LEFT OUTER JOIN
。
這是我的完整查詢:
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日):
但是,當我添加第二個左外部blog_date
(和其余blog_date
)時,看來新順序是按blog_date
降序排列,然后按category_name
分組。
子查詢的順序對外部查詢的順序沒有影響。 將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 ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.