MySQL запрос: как построить запрос, который содержит название события и название соответствующего места - PullRequest
1 голос
/ 06 января 2011

У меня есть две таблицы InnoDB: «места» и «события».В одном месте может быть много событий, , но событие может быть создано без входа.В этом случае внешний ключ события равен NULL.

Упрощенная структура таблиц выглядит следующим образом:

CREATE TABLE IF NOT EXISTS `events` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `places_id` int(9) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_events_places` (`places_id`),
) ENGINE=InnoDB;
ALTER TABLE `events`
  ADD CONSTRAINT `events_ibfk_1` FOREIGN KEY (`places_id`) REFERENCES `places` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;

CREATE TABLE IF NOT EXISTS `places` (
  `id` int(9) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB;

Вопрос в том, как построить запрос, содержащий имя события и имя события.соответствующее место (или нет значения, если не назначено место?) .

Я могу сделать это с двумя запросами, но затем я заметно отделяю события, которым назначено местоиз тех, которые не имеют места.

1 Ответ

3 голосов
/ 06 января 2011

Использовать OUTER JOIN

SELECT events.col1, events.col2, places.name
   FROM events LEFT OUTER JOIN places
      ON events.places_id = places.id

В OUTER JOIN таблица слева (или справа, для RIGHT OUTER JOIN) контролирует набор результатов.Соответствующие значения из другой таблицы предоставляются там, где можно найти совпадение, в противном случае эти значения равны NULL.

...