我有两张桌子
employee
---------
ID,
first_name,
last_name
salary
------
id,
first_name,
last_name,
salary
如何使用联接表获得两个最高薪水?
答案 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
。)