У меня есть набор из нескольких таблиц (раздели обзор):MySQL: несколько выборок, несколько соединений?
Brand;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | tinyint(10) | NO | PRI | NULL | |
| name | varchar(255) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Relations;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id1 | tinyint(10) | NO | PRI | NULL | |
| id2 | tinyint(10) | NO | PRI | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Country;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | tinyint(10) | NO | PRI | NULL | |
| name | varchar(255) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
City;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | tinyint(10) | NO | PRI | NULL | |
| name | varchar(255) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
Каждая строка имеет уникальный идентификатор. Каждая строка в таблице бренда имеет отношение к стране и городу. Соотношения между этими таблицами хранятся в таблице «Отношения», поэтому в таблице отношений для каждой строки бренда есть две строки.
Я пытаюсь получить фирменное наименование, название страны и название города для данного идентификатора торговой марки. Я могу выбрать эти отношения по отдельным выборам, но моя цель - сделать это (если возможно) в одном запросе.
Я могу получить один из соотношений (страна), но я хочу, чтобы получить город, а также:
SELECT Brand.name as brand, Country.name as country
FROM Brand
LEFT JOIN _relations
ON Relations.id1 = Brand.id
INNER JOIN Country
ON Country.id = Relations.id2
WHERE Brand.id = '123456';
Результат:
+-----------+-------------+
| brand | country |
+-----------+-------------+
| brandname | countryname |
+-----------+-------------+
Моя цель состоит в том, чтобы:
+-----------+-------------+-------------+
| brand | country | city |
+-----------+-------------+-------------+
| brandname | countryname | cityname |
+-----------+-------------+-------------+
Может ли кто-нибудь помочь мне с этим или указать мне в правильном направлении?
Великий, спасибо, что был идеальным решением. Однако я столкнулся с новой проблемой. Что делать, если город не существует для бренда. Теперь он возвращает 0 строк, если ни один идентификатор города не найден в таблице отношений. Есть ли способ игнорировать соединение и возвращать null или, возможно, настраиваемое значение для поля City? Вместо результата я хочу получить название бренда, название страны и пустое поле города. – Tod
Наружное соединение вместо внутреннего. –