2017-05-03 9 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); 

上記のクエリの間だけ異なるが2番目のクエリは、結果セットにPlayerIDを複製できますもう一つの選択フィールドs.pts Pointsを持っているということです。 私はなぜ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の中にmaxを選択しているので、sに複数のレコードが含まれていると仮定します。 – hisnameismyname2

+0

はい、複数のレコードが含まれています。私はそれがなぜ機能しないのかを明確にしましたか? –

関連する問題