You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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;

代码说明:

  • 给两张表起了t1t2的别名,写起来更清爽;
  • INNER JOINON条件同时匹配三个标识码,确保关联的是同一个学生的记录;
  • WHERE子句先筛选出table_one中country_code = 001的学生,再关联table_two拿到对应姓名。

用你提供的示例数据运行这个查询,得到的结果就是你想要的:

country_codestate_codetown_codeclassname
0010040019John Doe
0010030017First Last

额外小提示:

如果存在table_one里有学生记录,但table_two中没有对应姓名的情况,你想保留这些学生的信息(name字段显示NULL),可以把INNER JOIN换成LEFT JOIN,这样即使没有匹配的name,也会返回table_one所有符合条件的记录。

内容的提问来源于stack exchange,提问作者Z.Chen

火山引擎 最新活动