MySQL: множественный выбор, множественные объединения? - PullRequest
1 голос
/ 14 января 2012

У меня есть набор из нескольких таблиц (общий обзор):

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    |
+-----------+-------------+-------------+

Может кто-нибудь помочь мне с этим или указать мнев правильном направлении?

Ответы [ 2 ]

0 голосов
/ 14 января 2012

По сути, вы снова вступаете в отношения, а затем используете это, чтобы получить Город, так что-то вроде

SELECT Brand.name as brand, Country.name as country, City.Name as City
FROM Brand 
LEFT JOIN _relations relCountry
ON relCountry.id1 = Brand.id 
INNER JOIN Country 
ON Country.id = relCountry.id2 
LEFT JOIN _relations relCity 
ON relCity.id1 = Brand.id 
INNER JOIN City 
ON City.id = relCity.id2 
0 голосов
/ 14 января 2012

Соединить таблицу связей еще раз под другим псевдонимом.

Примерно так:

SELECT Brand.name as brand, Country.name as country, City.name as city
FROM Brand 
LEFT JOIN Relations ON Relations.id1 = Brand.id 
INNER JOIN Country ON Country.id = Relations.id2 
LEFT JOIN Relations r2 ON r2.id1 = Brand.id
LEFT JOIN City ON City.id = r2.id2
WHERE Brand.id = '123456';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...