例如,從下表中我會想要找回第2和第4小組,因爲他們有多個同名球員。如何選擇多列在兩列中分別具有相同的值?
--Team-- | --Player--
1 | John
1 | Billy
2 | Dillan
2 | Brady
2 | Brady
3 | John
4 | Gary
4 | Gary
例如,從下表中我會想要找回第2和第4小組,因爲他們有多個同名球員。如何選擇多列在兩列中分別具有相同的值?
--Team-- | --Player--
1 | John
1 | Billy
2 | Dillan
2 | Brady
2 | Brady
3 | John
4 | Gary
4 | Gary
如果你只希望球隊名稱(而不是重複的球員的名字),再一個方法是使用SELECT DISTINCT
with a GROUP BY
:
SELECT DISTINCT Team
FROM TeamPlayer
GROUP BY Team, Player
HAVING COUNT(*) > 1;
我提到,因爲聚合查詢中的SELECT DISTINCT
幾乎總是一個錯誤,但這是一個有效的用法。
這就是說,我可能會更傾向於做:
SELECT Team
FROM TeamPlayer
GROUP BY Team
HAVING COUNT(*) > COUNT(DISTINCT Player);
後者查詢似乎已經做到了。謝謝! – NSouth
使用GROUP BY
+ HAVING
:
SELECT Team, Player
FROM dbo.TeamPlayer
GROUP BY Team, Player
HAVING COUNT(*) > 1
GROUP BY HAVING COUNT(*)> 1 – jarlh