MySQL多表查询求助:关联双表获取指定国家学生完整信息
解决多字段关联查询问题
看起来你之前用UNION是走岔路啦——UNION是用来把结构相似的结果集纵向合并行的,而你现在需要的是横向拼接列,把两张表里对应学生的信息凑到一起,所以正确姿势应该是用JOIN,而且是基于三个标识码的多字段关联。
根据你的需求,用INNER JOIN就刚好合适,它只会返回两张表中三个code完全匹配的记录,完美契合你“先从table_one筛选特定区域学生,再匹配table_two对应姓名”的需求。
下面是具体的SQL语句:
SELECT t1.country_code, t1.state_code, t1.town_code, t1.class, t2.name FROM table_one t1 INNER JOIN table_two t2 ON t1.country_code = t2.country_code AND t1.state_code = t2.state_code AND t1.town_code = t2.town_code WHERE t1.country_code = 001;
代码说明:
- 给两张表起了
t1和t2的别名,写起来更清爽; INNER JOIN的ON条件同时匹配三个标识码,确保关联的是同一个学生的记录;WHERE子句先筛选出table_one中country_code = 001的学生,再关联table_two拿到对应姓名。
用你提供的示例数据运行这个查询,得到的结果就是你想要的:
| country_code | state_code | town_code | class | name |
|---|---|---|---|---|
| 001 | 004 | 001 | 9 | John Doe |
| 001 | 003 | 001 | 7 | First Last |
额外小提示:
如果存在table_one里有学生记录,但table_two中没有对应姓名的情况,你想保留这些学生的信息(name字段显示NULL),可以把INNER JOIN换成LEFT JOIN,这样即使没有匹配的name,也会返回table_one所有符合条件的记录。
内容的提问来源于stack exchange,提问作者Z.Chen




