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
。您可以根据您的实际需求进行更改。
有两个表:
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
。您可以根据您的实际需求进行更改。