如何基于T-SQL语法查询互发邮件的关联员工ID对
T-SQL 互发邮件关联员工对查询方案
涉及表结构
主键字段以粗体标注:
- Employee(员工表):字段包含 id(主键)、name(员工姓名)、emailAddress(邮箱地址)
- Email(邮件主表):字段包含 emailId(主键)、senderId(发件人员工ID)、receiverId(收件人员工ID)、subject(邮件主题)
- EmailDetails(邮件详情表):字段包含 emailId(主键)、date(发送时间)、status(邮件状态)
题目规则
- 关联判定逻辑:若两名员工互相向对方发送过至少1封邮件(即A存在向B发信的记录、同时B也存在向A发信的记录),则判定二人为关联状态
- 输出要求:返回所有满足关联条件的员工对ID,同一对员工不得重复返回(如(A,B)和(B,A)视为同一对,仅需返回一次)
T-SQL 实现代码
SELECT DISTINCT e1.senderId AS EmployeeA_Id, e1.receiverId AS EmployeeB_Id FROM Email e1 INNER JOIN Email e2 ON e1.senderId = e2.receiverId AND e1.receiverId = e2.senderId -- 过滤同一对员工重复返回、自己给自己发邮件的无效场景 WHERE e1.senderId < e1.receiverId
实现说明
- 核心逻辑通过Email表自连接完成双向发信记录匹配,不需要关联Employee、EmailDetails表——题目未要求返回员工属性、也未对邮件发送时间/状态做筛选,冗余关联会降低查询效率
- 条件
e1.senderId < e1.receiverId同时实现两个效果:一是避免同一对员工以(ID1,ID2)、(ID2,ID1)的形式重复输出,二是自动过滤员工自己给自己发邮件的无效记录 DISTINCT用于去重,避免两名员工之间有多封往来邮件时返回重复的员工对
内容的提问来源于stack exchange,提问作者Juggle_knowledge
相关产品推荐
相关产品推荐

