You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL关联多张表查询数据?附三张SQL表示例

MySQL多表关联查询实现方案

针对你给出的三张关联表(fruits、colors、associatives),我们可以通过JOIN语句来实现跨表关联查询,下面是几种常用的场景和对应的SQL语句:

1. 基础关联查询:获取每个水果对应的所有颜色明细

这是最常用的场景,通过中间表associatives将fruits和colors关联起来,使用INNER JOIN可以得到所有有对应颜色的水果-颜色组合:

SELECT 
    f.fruit_id,
    f.fruit_name,
    c.color_id,
    c.color_name
FROM fruits f
INNER JOIN associatives a ON f.fruit_id = a.fruit_id
INNER JOIN colors c ON a.color_id = c.color_id;

结果说明:

这条查询会返回类似这样的结果(以你给出的示例数据为例):

fruit_idfruit_namecolor_idcolor_name
1Banana91Yellow
1Banana92Green
2Apple91Yellow
2Apple92Green

2. 聚合查询:将单个水果的所有颜色合并为一行

如果希望每个水果只显示一行,同时把对应的所有颜色列出来,可以使用GROUP_CONCAT()函数:

SELECT 
    f.fruit_id,
    f.fruit_name,
    GROUP_CONCAT(c.color_name SEPARATOR ', ') AS color_list,
    GROUP_CONCAT(c.color_id SEPARATOR ', ') AS color_id_list
FROM fruits f
INNER JOIN associatives a ON f.fruit_id = a.fruit_id
INNER JOIN colors c ON a.color_id = c.color_id
GROUP BY f.fruit_id, f.fruit_name;

结果说明:

这条查询会把每个水果的颜色合并成字符串,比如:

fruit_idfruit_namecolor_listcolor_id_list
1BananaYellow, Green91, 92
2AppleYellow, Green91, 92

3. 左连接查询:包含无颜色的水果(如果存在)

如果你的fruits表中有某个水果没有对应的颜色记录(比如示例中的Pear),使用LEFT JOIN可以确保这类水果也被查询出来,对应的颜色字段会显示为NULL:

SELECT 
    f.fruit_id,
    f.fruit_name,
    c.color_id,
    c.color_name
FROM fruits f
LEFT JOIN associatives a ON f.fruit_id = a.fruit_id
LEFT JOIN colors c ON a.color_id = c.color_id;

结果说明:

Pear会被包含在结果中,对应的color_id和color_name为NULL:

fruit_idfruit_namecolor_idcolor_name
1Banana91Yellow
1Banana92Green
2Apple91Yellow
2Apple92Green
3PearNULLNULL

补充说明

  • 我们给表设置了别名(比如f代表fruits),这样可以简化SQL语句,避免重复写表名。
  • INNER JOIN只会返回三张表中都匹配的记录,而LEFT JOIN会保留左表(这里是fruits)的所有记录,即使没有对应的关联数据。

内容的提问来源于stack exchange,提问作者user9516731

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:53:07