SQL Logic不在查询中显示某些行

时间:2012-12-16 06:18:54

标签: sql logic

我一直在寻找如何在SQL查询中应用逻辑来实现我的目标。我现在对任何建议持开放态度。

我有两个表,我之间有一个内连接。这两张桌子是所有MLB棒球运动员(过去和现在)的完整列表,以及所有名人堂球员的表格。我希望得到每行一个独特玩家的查询结果,并且如果他们在名人堂中有一个用Y或N填充的列。

表1 - 玩家

ID
HallofFameID
NameFirst
NameLast

表2 - HallOfFame

HallofFameID
YearID
Votes
Inducted

每个玩家在玩家表中都有一个条目,但可以在名人堂表中多次输入他们的玩家ID。在我的结果查询中使用内部联接将拉出看起来像这样的行......

Player ID  |   NameFirst  |  NameLast  |  YearID  |  Votes  |  Inducted

001........| Don.........| Sutton......| 1992.....| 100.....| N

001........| Don.........| Sutton......| 1993.....| 89......| N 

001........| Don.........| Sutton......| 1994.....| 100.....| N   

001........| Don.........| Sutton......| 1998.....| 341.....| Y

002........| Mickey......| Mantle......| 1974.....| 341.....| Y So forth...

我希望我的结果查询不显示1992-1997中Don Sutton未被选出的行,但只显示1998年,然后用Y移动到Mickey Mantle行。还有其他玩家谁没有当选,他们的名字旁边有一个N,我需要在同一查询结果中显示霍尔资格多年。

我已将我的工作SQL包含在内以供参考。我不是在寻找任何人来编写我的SQL,而是指向我正确的方向,使用关键字或我可能缺少的逻辑。 提前致谢

Select  DISTINCT
    Master.namefirst, 
    Master.nameLast, 
    Master.HofID,
    HallOfFame.inducted,
    HallOfFame.yearid
FROM 
    HallOfFame 
INNER JOIN 
    Master On HallOfFame.hofID = Master.hofID
Group by 
    Master.nameFirst,
    Master.nameLast,
    Master.PlayerID,
    Master.hofID,
    HallOfFame.inducted,
    HallOfFame.yearid*

1 个答案:

答案 0 :(得分:0)

请改为尝试:

SELECT
  m.namefirst, 
  m.nameLast, 
  m.HallofFameID,
  h1.inducted,
  h1.yearid
FROM HallOfFame h1
INNER JOIN
(
   SELECT PlayerID, MAX(YearID) LatestYear
   FROM HallOfFame 
   GROUP BY PlayerID
) h2 ON h1.PlayerID = h2.PlayerID AND h1.YearID = h2.LatestYear
INNER JOIN players m On h1.PlayerId = m.Id;

SQL Fiddle Demo

这会给你:

| NAMEFIRST | NAMELAST | HALLOFFAMEID | INDUCTED | YEARID |
-----------------------------------------------------------
|       Don |   Sutton |            1 |        Y |   1998 |
|    Mickey |   Mantle |            2 |        Y |   1974 |