Помогите с объединениями

rulin

Новичок
Помогите с объединениями

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

country - Страны
country_list - Список названий стран на разных языках
lang - Языки

Нужно вывести список названий стран на языке с lang.alias = en, при этом если в таблице со списком названий (country_list) нет названия на нужном языке то в результирующей выборке поле с названием (name) должно быть пустым (или NULL)

Вот написал выборку c alias = ru:

Код:
SELECT `c`.`country_id`, `c`.`alias`, `cl`.`name` FROM `country` AS `c` 
INNER JOIN `country_list` AS `cl` ON cl.country_id = c.country_id
INNER JOIN `lang` AS `l` ON l.lang_id = cl.lang_id WHERE (l.alias = 'ru')
Результат:
Код:
country_id 	alias 	name 
1	russia	Россия
2	usa	Америка
3	germany	Германия
4	france	Франция
Но тут проблема в том что если в таблице со списком названий (country_list) нет названия на выбираемом языке то эта страна не попадет в результат выборки, т.е. если выбрать язык с alias = en, в результат выборки попадут не все страны :

Код:
SELECT `c`.`country_id`, `c`.`alias`, `cl`.`name` FROM `country` AS `c` 
INNER JOIN `country_list` AS `cl` ON cl.country_id = c.country_id
INNER JOIN `lang` AS `l` ON l.lang_id = cl.lang_id WHERE (l.alias = 'en')
Результат:
Код:
country_id 	alias 	name 
1	russia	Russia
2	usa	USA
А должно быть так:

Код:
country_id 	alias 	name 
1	russia	Russia
2	usa	USA
3	germany
4	france
Помогите написать запрос!
Спасибо!


Структура таблиц с данными:
Код:
--
-- Структура таблицы `country`
--

CREATE TABLE IF NOT EXISTS `country` (
  `country_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'id страны',
  `alias` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT 'псевдоним для uri',
  PRIMARY KEY (`country_id`),
  UNIQUE KEY `alias` (`alias`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `country`
--

INSERT INTO `country` (`country_id`, `alias`) VALUES
(4, 'france'),
(3, 'germany'),
(1, 'russia'),
(2, 'usa');

-- --------------------------------------------------------

--
-- Структура таблицы `country_list`
--

CREATE TABLE IF NOT EXISTS `country_list` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `country_id` int(3) NOT NULL COMMENT 'id страны',
  `lang_id` int(2) NOT NULL COMMENT 'id языка',
  `name` text COLLATE utf8_unicode_ci NOT NULL COMMENT 'название страны',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

--
-- Дамп данных таблицы `country_list`
--

INSERT INTO `country_list` (`id`, `country_id`, `lang_id`, `name`) VALUES
(1, 1, 1, 'Россия'),
(2, 2, 1, 'Америка'),
(3, 1, 2, 'Russia'),
(4, 2, 2, 'USA'),
(5, 3, 1, 'Германия'),
(6, 4, 1, 'Франция');

-- --------------------------------------------------------

--
-- Структура таблицы `lang`
--

CREATE TABLE IF NOT EXISTS `lang` (
  `lang_id` int(2) NOT NULL AUTO_INCREMENT COMMENT 'id языка',
  `alias` varchar(2) COLLATE utf8_unicode_ci NOT NULL COMMENT 'псевдоним для uri',
  PRIMARY KEY (`lang_id`),
  UNIQUE KEY `alias` (`alias`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `lang`
--

INSERT INTO `lang` (`lang_id`, `alias`) VALUES
(2, 'en'),
(1, 'ru');
 

zerkms

TDD infected
Команда форума
нужно не бездумно заменять одни конструкции, а открыть документацию и почитать, что и как.
 
Сверху