SQL запрос (связь таблиц) - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте

, не могу сообразить, как составить запрос. Есть 2 таблицы:
CREATE TABLE `users` (
  `user_id` INT(11) NOT NULL AUTO_INCREMENT,
  `user_name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
 
CREATE TABLE `events` (
  `event_id` INT(11) NOT NULL AUTO_INCREMENT,
  `event_name` VARCHAR(45) NOT NULL,
  `user_id` INT(11) DEFAULT NULL,
  PRIMARY KEY (`event_id`),
  KEY `fk_events_1_idx` (`user_id`),
  CONSTRAINT `fk_events_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Таблица пользователей, и связанная с ней по user_id таблица событий по пользователям. У одного пользователя может быть много событий или не быть не одного. Нужно вывести ВСЕХ пользователей, и ТОЛЬКО ПОСЛЕДНЕЕ его событие. Т.е. за основу можно взять простой запрос:
SELECT  * FROM test.users
LEFT JOIN `events` ON events.user_id=users.user_id
и как-то добавить сюда условие MAX(event_id), потому что этот запрос выводит одного пользователя столько раз сколько у него событий.

Буду благодарен за любую подсказку.

Решение задачи: «SQL запрос (связь таблиц)»

textual
Листинг программы
SELECT u.user_id, u.user_name, ee.event_name, ee.event_id FROM 
(
    SELECT MAX(event_id) AS id, user_id, event_name
    FROM events
    GROUP BY user_id
) AS e
INNER JOIN users u ON e.user_id = u.user_id
INNER JOIN `events` ee ON ee.event_id = e.id

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5