我有2個表格:ticket
和ticket_message
。ORDER BY不工作內部JOIN SELECT
我想選擇所有未由我們的支持團隊回答的門票。這意味着留在票證中的最後一條消息將具有類型client
。
我想這樣的代碼:
SELECT `ticket`.*,`message`.*
FROM `ticket`
LEFT JOIN (SELECT * FROM `ticket_message` ORDER BY `timeCreated` DESC) AS `message` ON `message`.`ticketId` = `ticket`.`id`
GROUP BY `ticket`.`id`
HAVING `message`.`type` = 'client'
的事情是,這個代碼工作完美地與MySQL的42年5月5日我的dev的服務器上,但消息並沒有在子查詢與MySQL 5.7排序生產服務器上。 9
這裏是EXPLAIN
結果:
爲42年5月5日:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY ticket ALL NULL NULL NULL NULL 38
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 130
2 DERIVED ticket_message ALL NULL NULL NULL NULL 127 Using filesort
爲5.7.9:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE ticket NULL index PRIMARY,ticket_ibfk_1,ticket_ibfk_2 PRIMARY 4 NULL 38 100.00 NULL
1 SIMPLE ticket_message NULL ref ticket_message_ibfk_1 ticket_message_ibfk_1 5 ticket.id 3 100.00 NULL
爲什麼你不只是'LEFT JOIN ticket_message'?你想得到什麼結果?另外,你期望'ORDER BY timeCreated'做什麼? –
同樣對於你的查詢,這個'ORDER BY \'timeCreated \'DESC'完全不需要,實際上它會增加計劃。 –
在此查詢的連接內進行排序沒有意義。只需在聯接後對結果進行排序即可。 –