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

如何从数据库单列按升序成对取数(按Source分组)

正确SQL解决方案及问题分析

原SQL的问题点

  • 字段赋值错误:把e1.employee_name同时赋值给employee1和employee2,完全不符合成对需求,还多余查询了e2.employee_name字段。
  • JOIN逻辑错误:用manager_id = employee_id作为连接条件,这是在关联上下级,而非生成任意ID大小符合要求的员工对。
  • 冗余操作:DISTINCT和GROUP BY的使用都没抓住核心问题,反而可能导致结果混乱,因为逻辑本身就偏离需求。

正确实现思路

要生成Source为"A"的员工成对结果,且employee1的ID小于employee2的ID,核心是自连接+ID大小过滤+Source条件:

  1. 对Employees表做自连接,用别名e1和e2分别代表两个员工。
  2. 连接条件设置为e1.employee_id < e2.employee_id,确保每个员工对只出现一次(不会出现e1和e2互换的重复对)。
  3. 过滤出Source为"A"的员工,保证成对的两个员工都符合Source条件。

正确SQL语句

SELECT
    e1.employee_name AS employee1,
    e2.employee_name AS employee2
FROM Employees e1
JOIN Employees e2
    ON e1.employee_id < e2.employee_id
WHERE
    e1.Source = 'A'
    AND e2.Source = 'A'
ORDER BY e1.employee_id, e2.employee_id;

补充说明

  • 上述语句通过WHERE条件实现了“按Source为'A'分组”的逻辑,只处理该Source下的员工成对组合。
  • 不需要DISTINCT或GROUP BY,因为e1.employee_id < e2.employee_id的条件已经避免了重复对的出现,只要表中employee_id唯一,结果就不会有重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:07:06