Подтвердить что ты не робот

Использование где и внутреннее соединение в 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";

Можно ли использовать несколько внутренних объединений в запросах или есть другой способ?

4b9b3361

Ответ 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

Вы можете использовать столько соединений, сколько хотите, однако чем больше вы используете, тем больше это будет влиять на производительность.