首页 > 解决方案 > 在mysql中加入同一张表的子查询

问题描述

我正在尝试使用连接和子查询从我的表中获取一些数据。我的场景是:我有一个表 ABC,其结构如图所示

ID 姓名 父母关系

我想要身份证、姓名、父母姓名和配偶姓名,如果有任何成员不是配偶的话。我试过的查询是:

SELECT E1.name AS memname,
       E2.name AS parentname 
FROM ABC AS E1 
LEFT OUTER JOIN ABC AS E2 ON E2.id = E1.parent_id  
where E1.relation != "Spouse"

此查询返回成员的 id、name 和 parentname 的正确行。现在我需要重写查询,以便如果任何成员有配偶,我也会得到配偶姓名。预期输出为:

在此处输入图像描述

我尝试使用子查询来选择配偶姓名,但这是错误的。谁能帮我这个?提前致谢

标签: mysqljoinsubquery

解决方案


您可以再进行一次自加入以获得配偶姓名。

SELECT E1.name AS memname,
       E2.name AS parentname,
       E3.name AS spouse 
FROM ABC AS E1 
LEFT OUTER JOIN ABC AS E2 ON E2.id = E1.parent_id  
LEFT OUTER JOIN ABC AS E3 ON E3.parent_id = E1.id AND 
                             E3.relation = 'Spouse'   
where E1.relation <> 'Spouse'

推荐阅读