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

SQL中如何使用自连接替代子查询实现同门店员工查询

问题描述

需求为检索与员工George在同一零售门店工作的员工姓名、职位、邮箱ID,查询结果需排除George本人的记录。
你当前使用嵌套子查询的实现代码如下:

SELECT empname, designation, emailid FROM Empdetails WHERE Worksin = (
      SELECT Worksin FROM Empdetails where empname = 'George'
) AND empname <> 'George'
SELF JOIN(自连接)实现方式

自连接的核心是将同一张表赋予不同别名,当作两张独立的表做关联查询,这里我们可以用一个别名定位George的门店信息,另一个别名筛选符合条件的员工记录,代码如下:

SELECT e2.empname, e2.designation, e2.emailid
FROM Empdetails e1
JOIN Empdetails e2
  ON e1.Worksin = e2.Worksin
WHERE e1.empname = 'George'
  AND e2.empname <> 'George';

逻辑说明

  • 表别名e1用来定位George的基准数据,e2用来返回最终需要的同门店员工数据
  • 关联条件e1.Worksin = e2.Worksin保证两张逻辑表匹配到的是同一门店的员工
  • WHERE子句中e1.empname = 'George'先锁定George对应的门店,e2.empname <> 'George'直接排除George本人的记录

补充说明:如果表中存在多个同名George的员工,原子查询写法里的=会触发子查询返回多行报错,需要替换为IN;自连接写法天然兼容这种重名场景,不需要额外调整。两种写法在主流数据库中经过优化器处理后,执行效率基本没有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:54:24