Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中使用where和internaljoin_Mysql_Inner Join - Fatal编程技术网

在mysql中使用where和internaljoin

在mysql中使用where和internaljoin,mysql,inner-join,Mysql,Inner Join,我有三张桌子 地点 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 ID |LOCATIONS_ID |SCHOOL_ID 1 | 1 |1 2 | 2

我有三张桌子

地点

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 
 ID |LOCATIONS_ID |SCHOOL_ID
 1  | 1           |1
 2  | 2           |2
 3  | 3           |3
学校

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 
 ID |LOCATIONS_ID |SCHOOL_ID
 1  | 1           |1
 2  | 2           |2
 3  | 3           |3
学校地点

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 
 ID |LOCATIONS_ID |SCHOOL_ID
 1  | 1           |1
 2  | 2           |2
 3  | 3           |3
这里的表位置包含申请的所有位置。学校的位置由ID调用

当我使用查询时

select locations.name from locations where type="coun";
它显示类型为“CONN”的名称

但是我想显示locations.name,其中只有学校位置有type=“con”

我尝试了以下查询,但似乎没有一个有效

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';
WHERE
子句必须位于语句的末尾

尝试以下操作:

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"

您可以将地点连接到学校地点,然后将学校地点连接到学校。这形成了一组所有相关的位置和学校,然后可以使用WHERE子句将其扩展到那些位置类型为“CONN”的位置。

您可以使用任意数量的连接,但是,使用越多,对性能的影响就越大。

尝试以下方法:

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';

msql中是否需要反勾号?不需要,但我喜欢有反勾号,它可以避免出现奇怪的表名或列名问题(例如select、count、a%b等),而且更简单。不幸的是,它还使查询不符合ANSI标准,如果您试图将查询迁移到另一个数据库,可能会导致问题。分隔标识符的正确方法是使用“双引号”,但MySQL默认不支持这种方法;您必须在SQL_模式下设置ANSI_引号才能获得该值。当然,这会弄乱你的字符串文字“con”,不管SQL_模式如何,它都应该用单引号来写。有趣的是,我不知道倒勾和引号(我只使用mysql)。嗯,关于字符串的单引号(问题询问者代码中的复制粘贴错误)你是对的。哎呀,我一直在把
WHERE
语句放在
内部连接之前。我用了常规的单引号。这不能回答他的问题。我不同意,请看问题的最后一句。当然,我没有回答整个问题,但我觉得其他答案中有一个涵盖了这一点。但根据stackoverflow礼仪,这应该是对特定答案的评论。谢谢你的理解。