MySQL Внутреннее объединение Получить последний элемент объединенного стола - PullRequest
0 голосов
/ 13 апреля 2020

Существует две таблицы:

Имя таблицы: билет

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

Имя таблицы: 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

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Коррелированный подзапрос может помочь:

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 имело бы смысл, но этот столбец в вашей таблице пуст, поэтому я выбрал id. Вы можете изменить это в соответствии с вашими реальными требованиями.

1 голос
/ 13 апреля 2020

Вы можете присоединиться ticket к запросу, который возвращает последнее событие ::

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 |        |
...