[英]How to do Left JOIN with ORDER and LIMIT MySql
我有一個可以拉票的sql,我需要將其與上次回復時間和上次回復者一起離開
但是此SQL仍然對1張票提取了多個回復,我只需要最后一張
SELECT a.*,
r.lastreply_by,
r.lastreplytime
FROM `tickets` AS a
LEFT JOIN replies AS r ON a.id = (SELECT r.ticketid ORDER BY ticketid DESC LIMIT 1)
這是從該SQL的快照http://prntscr.com/2b4ihy
任何幫助表示贊賞。 謝謝!
你可以這樣嘗試
SELECT t.*,
r.lastreply_by,
r.lastreplytime
FROM tickets t LEFT JOIN
(
SELECT ticketid, lastreply_by, lastreplytime
FROM
(
SELECT ticketid, lastreply_by, lastreplytime
FROM replies
ORDER BY lastreplytime DESC
) q
GROUP BY ticketid
) r
ON t.id = r.ticketid
這是SQLFiddle演示
假設replyid
是replies
表中每個回復的唯一鍵:
SELECT
a.*,
r.lastreply_by,
r.lastreplytime
FROM
`tickets` a
LEFT JOIN (
SELECT ticketid t, MAX(replyid) replyid
FROM
replies
GROUP BY ticketid
) t ON t.t = a.ticketid
LEFT JOIN replies r ON r.ticketid = t.t AND r.replyid = t.replyid
ps:這是標准的SQL,因此它為彼得的答案提供了一個很好的選擇(當然,這不會使它的有效性降低)。
這應該工作:
SELECT a.*,
r.lastreply_by,
r.lastreplytime
FROM `tickets` AS a
LEFT JOIN replies AS r
ON r.id = (
SELECT r2.id
FROM replies r2
WHERE r2.ticketid = a.id
ORDER BY r2.lastreplytime DESC
LIMIT 1
)
編輯:我將順序更改為lastreplytime
因此實際上它返回了最新的回復。
SQL小提琴: http ://sqlfiddle.com/#!2/1f5c16/4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.