2015-12-14 60 views
0

我想要从不同列中的员工表中获得与同一工资相同薪水的员工的姓名以及他们在单独列中的普通工资。我已经使用Self Join使用以下查询。自我加入以获得获得相同工资的员工姓名

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出现在另一行中。我怎样才能避免这种情况?

回答

0

您正在获取重复项,因为您已请求所有名称不以任何顺序排列的结果。如果你只想要一个副本,指定一个顺序:

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; 
+0

工作完美。谢谢。 – Manick

+0

如果解决了您的问题,请考虑将此答案标记为已接受。 – GrandOpener

相关问题