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

MySQL查询同表单行数据并关联显示关联行名称

问题描述

我有一张名为Stores的表,结构如下:

Table: Stores
| Group  | ID    | Name    |  Link     |
| 1      | 1     | Store A |           |
| 1      | 2     | Store B |   3       |
| 1      | 3     | Store C |           |
| 2      | 4     | Store D |           |

我需要执行一条查询,返回目标行的ID和Name,同时若该行的Link列存在关联ID,需新增一列显示该关联ID对应的名称。例如查询ID为2的行时,输出如下:

| ID    | Name    |  Link     |
| 2     | Store B |  Store C  |

我尝试了以下查询语句,但Link字段始终返回NULL:

SELECT `ID`, `Name`,(SELECT `Name` FROM `Stores` WHERE Stores.ID = Stores.Link ) AS Link FROM `Stores` WHERE (`ID` LIKE '2');

请问能否实现这种查询方式?


解决方案

你的查询返回NULL是因为子查询里没有区分主表和关联表,Stores.ID = Stores.Link相当于拿当前行的ID和自己的Link对比,自然匹配不到数据。下面两种方法都能实现需求:

方法1:自连接(推荐)

逻辑清晰且性能更优,适合批量查询场景:

SELECT 
    s1.ID, 
    s1.Name, 
    s2.Name AS Link
FROM Stores s1
LEFT JOIN Stores s2 ON s1.Link = s2.ID
WHERE s1.ID = 2;
  • 用LEFT JOIN保证即使Link为空,主行数据也能正常返回,此时Link列显示NULL
  • 通过s1(主表)和s2(关联表)的别名,明确关联条件是s1.Link = s2.ID

方法2:修正子查询

给子查询的表加别名,区分主表和关联表:

SELECT 
    `ID`, 
    `Name`,
    (SELECT s2.Name FROM Stores s2 WHERE s2.ID = Stores.Link) AS Link
FROM Stores 
WHERE ID = 2;

这里子查询的s2是关联表别名,和主表的Stores做区分,能正确匹配到关联的店铺名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:15:06