您的規範化數據集很差,有時會發生這種情況,但出於性能原因值得修改。
要獲得您正在查找的查詢,您需要派生一組所有不同的語言,爲最高工資提取一個標識符,然後用該工資引用程序員。有很多方法可以實現這一點,最簡單的方法可能是用三個子查詢。
SELECT
lang.prof,
(
SELECT TOP 1 pname
FROM programmer
WHERE prof1 = lang.prof OR prof2 = lang.prof
ORDER BY salary DESC
) as Name,
(
SELECT MAX(Salary)
FROM programmer
WHERE prof1 = lang.prof OR prof2 = lang.prof
) as MaxSalary
FROM (
SELECT prof1 as prof FROM programmer
UNION
SELECT prof2 as prof FROM programmer
) AS lang
注意,這個查詢不優化,遠離最有效的方式來查詢您的表。如果可能的話,重新構建您的數據,讓程序員,語言和他們的熟練程度在不同的表格上。
一個乾淨的實現,帶有嵌套的子查詢。更多查詢,但是您通過直接引用查詢Programmer
,並且可以添加任意任意行。
SELECT
Lang.prof,
P.PName,
P.Salary
FROM
(
SELECT LL.prof, MAX(sP.salary) as MaxSalary
(
SELECT prof1 as prof FROM programmer
UNION
SELECT prof2 as prof FROM programmer
) as LL
INNER JOIN programer sP
ON LL.prof = sP.prof1 OR LL.prof = sP.prof2
GROUP BY LL.prof
) as Lang
INNER JOIN programmer P
ON (Lang.prof = P.prof1 OR P.prof2)
AND lang.MaxSalary = P.salary
你至少能證明你試過了什麼嗎?即使它不工作,這樣我們會更加興奮,幫助你:) – Bryan
可能的重複[幫助爲要求編寫查詢的方式](http://stackoverflow.com/questions/2726369/幫助這種方式來編寫查詢的要求) –