在mysql中使用where和inner join

sgi*_*sgi 28 mysql inner-join

我有三张桌子.

地点

ID   | NAME | TYPE |
1    | add1 | stat |
2    | add2 | coun | 
3    | add3 | coun |
4    | add4 | coun | 
5    | add5 | stat | 
Run Code Online (Sandbox Code Playgroud)

学校

 ID | NAME  
 1  | sch1     
 2  | sch2
 3  |sch3 
Run Code Online (Sandbox Code Playgroud)

school_locations

 ID |LOCATIONS_ID |SCHOOL_ID
 1  | 1           |1
 2  | 2           |2
 3  | 3           |3
Run Code Online (Sandbox Code Playgroud)

这里的表位置包含应用程序的所有位置.学校的位置由ID调用.

当我使用查询

select locations.name from locations where type="coun";
Run Code Online (Sandbox Code Playgroud)

它显示类型为"coun"的名称

但是我想显示locations.name,其中只有school_locations有type ="coun"

我尝试了以下查询,但似乎都没有工作

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;
Run Code Online (Sandbox Code Playgroud)

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";
Run Code Online (Sandbox Code Playgroud)

是否可以在查询中使用多个内部联接,还是有另一种方式?

kni*_*ttl 57

    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';
Run Code Online (Sandbox Code Playgroud)

WHERE条款必须在声明的最后

  • 遗憾的是,它还使查询不符合ANSI标准,如果您尝试将查询迁移到另一个数据库,则可能会导致问题.分隔标识符的正确方法是使用"双引号",但默认情况下MySQL不支持此功能.你必须在SQL_MODE中设置ANSI_QUOTES才能得到它.当然那会弄乱你的字符串文字"coun",无论SQL_MODE是用单引号写的,都应该这样. (5认同)
  • 不,但我喜欢在那里,它避免了奇怪的表或列名称的问题(例如选择,计数,%b等),更加万无一失 (2认同)