2017-02-27 15 views
0

サブクエリと多くの左外部結合を含むクエリがあります。私のサブクエリ内では、最新のblog_dateでレコードを注文し、結果を10レコードに制限しています。このサブクエリは、そのレコードに関する追加情報と一致する他の結合を持つレコードの順序を指定する必要がありますが、LEFT OUTER JOINを追加するとblog_dateの順序は無視されます。これは、私が注文を持続するための重要な要素を欠いているか、LEFT OUTER JOINが正しい結合ではないことを信じさせてくれました。ここで SQLの外部結合がサブクエリの順序に影響を及ぼす

は私の完全なクエリです:私は最初に(user)に参加含まれている場合、レコードが正しい順序になっている。ここ
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` 
; 

は結果である(2017年2月21日最新) :私は2番目の左外側に追加するとき

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

関連する問題