Использование где и внутреннее соединение в mysql
У меня есть три таблицы.
Места
ID | NAME | TYPE |
1 | add1 | stat |
2 | add2 | coun |
3 | add3 | coun |
4 | add4 | coun |
5 | add5 | stat |
школы
ID | NAME
1 | sch1
2 | sch2
3 |sch3
school_locations
ID |LOCATIONS_ID |SCHOOL_ID
1 | 1 |1
2 | 2 |2
3 | 3 |3
Здесь расположение таблиц содержит все местоположения приложения. Локации для школы вызываются по идентификаторам.
когда я использую запрос
select locations.name from locations where type="coun";
он отображает имена с типом "страна"
Но я хочу отобразить location.name, где только school_locations имеют тип = "country"
Я пробовал следующие запросы, но никто не работает
select locations.name
from locations
where type="coun"
inner join school_locations
on locations.id=school_locations.location_id
inner join schools
on school_locations.school.id=schools.id;
и
select locations.name
from locations
inner join school_locations
on locations.id=school_locations.location_id
inner join schools
on school_locations.school.id=schools.id where type="coun";
Можно ли использовать несколько внутренних объединений в запросах или есть другой способ?
Ответы
Ответ 1
SELECT `locations`.`name`
FROM `locations`
INNER JOIN `school_locations`
ON `locations`.`id` = `school_locations`.`location_id`
INNER JOIN `schools`
ON `school_locations`.`school_id` = `schools_id`
WHERE `type` = 'coun';
предложение WHERE
должно быть в конце инструкции
Ответ 2
Попробуйте следующее:
SELECT Locations.Name, Schools.Name
FROM Locations
INNER JOIN School_Locations ON School_Locations.Locations_Id = Locations.Id
INNER JOIN Schools ON School.Id = Schools_Locations.School_Id
WHERE Locations.Type = "coun"
Вы можете присоединиться к локациям в School_Locations, а затем School_Locations в школу. Это формирует набор всех связанных мест и школ, которые вы можете затем сгладить, используя предложение WHERE, для тех, чье местоположение имеет тип "страна".
Ответ 3
Попробуйте следующее:
SELECT
(
SELECT
`NAME`
FROM
locations
WHERE
ID = school_locations.LOCATION_ID
) as `NAME`
FROM
school_locations
WHERE
(
SELECT
`TYPE`
FROM
locations
WHERE
ID = school_locations.LOCATION_ID
) = 'coun';
Ответ 4
Вы можете использовать столько соединений, сколько хотите, однако чем больше вы используете, тем больше это будет влиять на производительность.