MySQL单语句关联3张关联表的查询需求及问题咨询
正确的三表关联MySQL查询写法
嘿,我帮你把这个三表关联的查询语句修正并优化一下,先说说你原语句里的几个小问题:
- 表名写错啦:把
Players改成实际的主表Student - 关联条件少了逻辑连接符
AND,会导致语法报错 - 用逗号分隔表的旧写法不如显式JOIN清晰,推荐用更规范的JOIN语法
下面是针对指定学生ID(比如你要查的ID=3)的正确单条查询语句,用显式INNER JOIN来关联三张表,可读性和可维护性都更好:
SELECT * FROM Student s INNER JOIN SchoolData sd ON s.School = sd.ID INNER JOIN LocationData ld ON sd.Location = ld.ID WHERE s.ID = '3';
额外说明:
- 我给每张表加了简短别名(
s代指Student,sd代指SchoolData,ld代指LocationData),写起来更省事,也能避免字段名冲突 - 如果想保留Student表的记录,哪怕对应的学校或地理位置数据不存在,可以把
INNER JOIN换成LEFT JOIN - 原语句里用双引号包字符串ID,MySQL虽然兼容,但更推荐用单引号,符合SQL标准
- 关联逻辑完全按照你描述的规则:Student的
School字段关联SchoolData的ID,SchoolData的Location字段关联LocationData的ID
另外,不建议一直用SELECT *,如果只需要特定字段,比如学生姓名、学校名称、所在城市,直接写明字段会更高效,比如:
SELECT s.Name AS StudentName, sd.Name AS SchoolName, ld.City, ld.State FROM Student s INNER JOIN SchoolData sd ON s.School = sd.ID INNER JOIN LocationData ld ON sd.Location = ld.ID WHERE s.ID = '3';
内容的提问来源于stack exchange,提问作者Denoteone
相关产品推荐
相关产品推荐

