在mysql中使用where和inner join
Posted
技术标签:
【中文标题】在mysql中使用where和inner join【英文标题】:using where and inner join in mysql 【发布时间】:2010-11-26 10:07:31 【问题描述】:我有三张桌子。
位置
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";
它显示类型为“coun”的名称
但我想显示只有 school_locations 有 type="coun" 的位置.name
我尝试了以下查询,但似乎没有一个有效
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
子句必须在语句的末尾
【讨论】:
msql 中需要反引号吗? 不,但我喜欢把它们放在那里,它避免了奇怪的表或列名(例如 select、count、a%b 等)的问题,并且更安全 不幸的是,它还会使查询不符合 ANSI,如果您尝试将查询迁移到另一个数据库,可能会导致问题。分隔标识符的正确方法是使用“双引号”,但默认情况下 mysql 不支持;你必须在 SQL_MODE 中设置 ANSI_QUOTES 才能得到它。当然,这会弄乱您的字符串文字“coun”,无论 SQL_MODE 是什么,都应该用单引号编写。 有趣,不知道反引号和引号(我只使用 mysql)。嗯,关于字符串的单引号是对的(提问者代码中的复制粘贴错误) 天啊,我被困在WHERE
声明之前 INNER JOIN
。我使用了常规的单引号。【参考方案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"
您可以将 Locations 加入 School_Locations,然后将 School_Locations 加入学校。这形成了一组所有相关的位置和学校,然后您可以使用 WHERE 子句将它们向下移动到位置类型为“coun”的那些。
【讨论】:
【参考方案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】:您可以根据需要使用任意数量的连接,但是使用的越多,它对性能的影响就越大
【讨论】:
没有回答他的问题 我不同意,请参阅问题的最后一句话。当然我没有回答整个问题,但我觉得其他答案之一涵盖了这一点。 但是根据 *** 礼仪,这应该是对该特定答案的评论。感谢理解。以上是关于在mysql中使用where和inner join的主要内容,如果未能解决你的问题,请参考以下文章
带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用
Mysql Inner join,Where,Between 在多个表中