2015-12-14 39 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

相關問題