2017-05-03 65 views
-1

我有以下查詢以從多個表中進行選擇。distinct對某些選擇字段不起作用

select distinct s.playerId PlayerID, h.name TeamName, 
    m.firstname FirstName, m.lastname LastName, h.year Year 
from scoringnew s 
join 
(select max(s.pts) pts,s.tmid from scoringnew s group by s.tmid) t 
on s.tmid = t.tmid and s.pts = t.pts 
join master m on (m.playerId = s.playerId) 
join ice_hockey_teams_new h on (h.tmid = s.tmid); 

結果正確顯示不同PlayerID。但是,如果我添加上選擇更多的列會顯示類似下面重複PlayerID

select distinct s.playerId PlayerID, h.name TeamName, 
    m.firstname FirstName, m.lastname LastName, h.year Year, s.pts Points 
from scoringnew s 
join 
(select max(s.pts) pts,s.tmid from scoringnew s group by s.tmid) t 
on s.tmid = t.tmid and s.pts = t.pts 
join master m on (m.playerId = s.playerId) 
join ice_hockey_teams_new h on (h.tmid = s.tmid); 

上述查詢之間的唯一不同的是,第二個查詢有一個更選擇字段s.pts Points,其給出了結果集複製PlayerID。 我想知道爲什麼distinct不適用於所有情況。有什麼我誤解了嗎?顯示

重複的行如下:

enter image description here

回答

0

你不是故意要選擇t.pts?

select distinct s.playerId PlayerID, h.name TeamName, 
m.firstname FirstName, m.lastname LastName,  h.year Year, t.pts Points 
from scoringnew s 
join 
(select max(s.pts) pts,s.tmid from scoringnew s group by s.tmid) t 
on s.tmid = t.tmid 
join master m on (m.playerId = s.playerId) 
join ice_hockey_teams_new h on (h.tmid = s.tmid); 
+0

pts存在於t和s表中。 –

+0

正確,但我認爲s包含多個記錄,因爲您選擇的是t中的最大值。 – hisnameismyname2

+0

是的,s確實包含多條記錄。但我已經明確了爲什麼它不起作用? –