對於下面的查詢:MySql的相關子查詢執行
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT Salary) FROM Employee p
WHERE e.Salary<=p.Salary)
不應該在子查詢的e.salary<=p.salary
狀況得到扭轉。我們應該重複比較p.salary列與外部查詢中的e.salary
列,因此p.salary
必須位於左側。如果我的理解錯誤,請讓我知道。
PS:上述查詢試圖從Employee表中查找第二高薪水。
編輯:這個問題似乎在我的理解。我在下面提到我如何感覺查詢可能被執行:
假設我們有一個僱員,有4個薪水10,20,30,40。現在記錄開始逐一處理。所以我們得到以下4箇中間實現:
`code`
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 10<=p.salary -- record with salary 10
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 20<=p.salary
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 30<=p.salary
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 40<=p.salary
);
`code`
這個命令是否正確?不應該我們試圖比較的列,即p.salary必須在左側,如p.salary>=e.salary
?
您正在使用哪個數據庫:
在大多數數據庫,您可以使用
dense_rank()
表達這個代替這樣的相關子查詢的? – GurV這個查詢對我來說看起來是正確的。你有沒有真正的問題? –
「WHERE」條款中的條件表示計算> =當前行的薪水數量,並確保此數字爲= 2 ...換句話說,取第二高的薪水。 –