簡體   English   中英

如何使用ORDER和LIMIT MySql進行Left JOIN

[英]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演示

假設replyidreplies表中每個回復的唯一鍵:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM