rulin
Новичок
Помогите с объединениями
Имеем 3 таблицы:
country - Страны
country_list - Список названий стран на разных языках
lang - Языки
Нужно вывести список названий стран на языке с lang.alias = en, при этом если в таблице со списком названий (country_list) нет названия на нужном языке то в результирующей выборке поле с названием (name) должно быть пустым (или NULL)
Вот написал выборку c alias = ru:
Результат:
Но тут проблема в том что если в таблице со списком названий (country_list) нет названия на выбираемом языке то эта страна не попадет в результат выборки, т.е. если выбрать язык с alias = en, в результат выборки попадут не все страны :
Результат:
А должно быть так:
Помогите написать запрос!
Спасибо!
Структура таблиц с данными:
Имеем 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 Франция
Код:
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');