SYBASE如何使用join从表employee和工资中获得两个最高薪水

时间:2016-03-11 16:34:25

标签: sql tsql join sybase

我有两张桌子

 employee
 --------- 
 ID, 
 first_name, 
 last_name

 salary 
 ------ 
 id, 
 first_name, 
 last_name,  
 salary

如何使用联接表获得两个最高薪水?

1 个答案:

答案 0 :(得分:0)

假设id表中的salary是引用id表中employee列的外键。并假设id表和employee表中salary是唯一的。 (这些都是相当大的假设,但如果没有实际的表定义,我们只是在猜测。)

假设salary是数值数据类型,而“前两个”表示你想要最大的工资值,并且你只想在结果集中返回一列(工资)...... (再次,非常大的假设,但没有更详细的规范,我们只是猜测...)

然后这样的事情对你有用:

SELECT TOP 2 s.salary
  FROM salary s
  JOIN employee e
    ON e.ID = s.id
 ORDER BY s.salary DESC

作为替代方案,我认为您可以在运行查询之前省略TOP 2并执行单独的set rowcount 2

根本不清楚(根据您的问题)您尝试过的内容,您观察到的行为,或者您需要加入的原因(如果您只对salary感兴趣)。

作为另一个更奇怪的选择,如果您必须使用JOIN,并且您不希望在查询中包含employee表...则可以进行自我加入并获取具有“更高”薪水的行数的“计数”。 (考虑到salary不唯一的可能性,如果两个(或更多)行具有相同的薪水,我们会将id列视为决胜局。

 SELECT s.salary
   FROM salary s
   LEFT  
   JOIN salary t
     ON t.salary >= s.salary
    AND (t.salary > s.salary OR t.id > s.id)
 GROUP BY s.id
HAVING COUNT(t.id) < 2

(如果有三行或更多行具有相同的“最高”值salary,则只会返回两行,其值为salary。)