自我加入,以获得相同薪水的员工姓名

时间:2015-12-14 15:55:05

标签: oracle11g

我希望获得员工的姓名,这些员工从不同列中的员工表中获得相同的薪水,并且在单独的列中获得他们的共同薪水。我使用自我加入使用了以下查询。

SELECT a.first_name AS "Employee 1", b.first_name AS "Employee 2", 
       a.salary AS "Salary" FROM employees a, employees b

WHERE a.salary=b.salary AND a.first_name <> b.first_name;

上述查询的问题是重复记录。例如,a和b出现在一行中,然后b和a出现在另一行中。我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

您正在获取重复项,因为您已请求所有名称不相同的结果。如果您只需要一份副本,请指定订单:

SELECT a.first_name AS "Employee 1", b.first_name AS "Employee 2", a.salary AS "Salary" 
  FROM employees a, employees b 
 WHERE a.salary = b.salary AND a.first_name > b.first_name;

注意在最后一个条件中大于比较器而不是不相等的比较器。

注意:您可能还有问题。如果两名员工具有相同的名字,则无法找到它们。更好的解决方案是比较一些唯一标识符:

SELECT a.first_name AS "Employee 1", b.first_name AS "Employee 2", a.salary AS "Salary" 
  FROM employees a, employees b 
 WHERE a.salary = b.salary AND a.employee_id > b.employee_id;