MySQL 内部联接获取联接的最后一项 Table

MySQL Inner Join Get Last Item of Joined Table

有两个表:

Table姓名:

+-------+---------+---------+-------------------+
|  id   |  title       |  closed    | param     |
+-------+--------------+------------+-----------+
| 1     | test1        | 0          | 1         |
| 2     | test2        | 1          | 1         |
| 3     | test3        | 0          | 1         |

Table 姓名:ticket_event

+-------+---------+---------+-----------------+
|  id   |  ticket_id   |  event   | date      |
+-------+--------------+----------+-----------+
| 1     | 1            | OPENED   |           |
| 2     | 1            | CLOSED   |           |
| 3     | 2            | OPENED   |           |
+-------+--------------+----------+-----------+

我需要获取每张票的最后一条记录ticket_event。结果应该是:

test1 CLOSED
test2 OPENED
test3 NULL

我试过这段代码,但我得到了 ticket_event:

的所有记录
SELECT t1.title as t1Title, t2.event as t2Event FROM ticket t1 LEFT JOIN ticket_event t2 ON t1.id = t2.ticket_id

您可以加​​入 ticket 到 returns 最后一个事件::

的查询
SELECT t.title, e.event
FROM ticket t LEFT JOIN (
  SELECT e.* from ticket_event e
  WHERE NOT EXISTS (
    SELECT 1 FROM ticket_event 
    WHERE ticket_id = e.ticket_id AND id > e.id
  )
) e 
ON t.id = e.ticket_id

参见demo
结果:

| title | event  |
| ----- | ------ |
| test1 | CLOSED |
| test2 | OPENED |
| test3 |        |

相关子查询可以解决问题:

select 
    t.title,
    (
        select te.event 
        from ticket_event te 
        where te.ticket_id = t.id 
        order by te.id desc 
        limit 1
    ) last_event
from ticket t

不清楚您要使用 ticket_event 中的哪一列进行排序。使用 date 是有道理的,但在你的 table 中该列是空的,所以我选择了 id。您可以根据您的实际需求进行更改。