首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由内连接产生的重复数据

由内连接产生的重复数据
EN

Stack Overflow用户
提问于 2015-02-26 07:11:42
回答 3查看 101关注 0票数 0

我一直在绞尽脑汁想弄清楚到底出了什么问题。下面是我正在使用的表格:

代码语言:javascript
复制
 Table:gameday.atbats

   GameName                     Inning num  b   s   o   Batter   Pitcher      Result
-----------------------------------------------------------------------------------------
    gid_2008_09_24_cinmlb_houmlb_1  1   1   2   3   1   457803  150116  Jay Bruce strikes out swinging.  
    gid_2008_09_24_cinmlb_houmlb_1  1   2   1   0   2   433898  150116  Jeff Keppinger lines out to right fielder Hunter Pence.  
    gid_2008_09_24_cinmlb_houmlb_1  1   3   3   1   2   458015  150116  Joey Votto singles on a line drive to right fielder Hunter Pence.  
    gid_2008_09_24_cinmlb_houmlb_1  1   4   2   3   3   429665  150116  Edwin Encarnacion called out on strikes.  
    gid_2008_09_24_cinmlb_houmlb_1  1   5   1   2   0   430565  459371  Kazuo Matsui singles on a line drive to right fielder Jay Bruce.  
-----------------------------------------------------------------------------------------

Table: Gameday.pitches
 GameName                   GameAtBatID      Result
------------------------------------------------------
gid_2008_09_24_cinmlb_houmlb_1  1       Called Strike
gid_2008_09_24_cinmlb_houmlb_1  1       Ball
gid_2008_09_24_cinmlb_houmlb_1  1       Swinging Strike
gid_2008_09_24_cinmlb_houmlb_1  1       Ball
gid_2008_09_24_cinmlb_houmlb_1  1       Foul
gid_2008_09_24_cinmlb_houmlb_1  1       Foul
gid_2008_09_24_cinmlb_houmlb_1  1       Swinging Strike
gid_2008_09_24_cinmlb_houmlb_1  2       Ball
gid_2008_09_24_cinmlb_houmlb_1  2       In play, out(s)
gid_2008_09_24_cinmlb_houmlb_1  3       Called Strike
gid_2008_09_24_cinmlb_houmlb_1  3       Ball
--------------------------------------------------------

Table:batters
   GameName                     id         name_display_first_last
----------------------------------------------------------------------------------
gid_2008_09_24_cinmlb_houmlb_1  407783      Geoff Geary
gid_2008_09_24_cinmlb_houmlb_1  209315      David Newhan
gid_2008_09_24_cinmlb_houmlb_1  115629      LaTroy Hawkins
gid_2008_09_24_cinmlb_houmlb_1  113889      Darin Erstad
gid_2008_09_24_cinmlb_houmlb_1  457803      Jay Bruce
gid_2008_09_24_cinmlb_houmlb_1  433898      Jeff Keppinger
gid_2008_09_24_cinmlb_houmlb_1  458015      Joey Votto
gid_2008_09_24_cinmlb_houmlb_1  429665      Edwin Encarnacion
---------------------------------------------------------------------------

我使用的代码如下:

代码语言:javascript
复制
    SELECT gameday.atbats.event
         , gameday.atbats.inning
         , gameday.batters.name_display_first_last
         , gameday.pitchers.name_display_first_last
         , gameday.pitches.result
      FROM gameday.atbats
inner join gameday.pitches on gameday.atbats.num = gameday.pitches.gameAtBatID
                          and gameday.pitches.gamename=gameday.atbats.gamename
inner join gameday.batters on gameday.atbats.batter = gameday.batters.ID
                          AND gameday.atbats.gamename = gameday.batters.gameName
     where gameday.atbats.gamename = "gid_2008_09_24_cinmlb_houmlb_1"

当前代码会导致每个球员的结果加倍,例如,如果游戏中的第一个击球手在3个投球中三振出局,那么当前代码将在第一局中输出该击球手在6个投球中两次三振出局。我加入了游戏ID和每个表中的ID,但似乎仍然存在一些问题

EN

回答 3

Stack Overflow用户

发布于 2015-02-26 07:40:13

无意冒犯,但我不喜欢“使用distinct”的答案,因为这只会掩盖问题。在这种情况下,我所做的就是在FROM的正上方插入一个SELECT COUNT(*)行,然后逐步查看结果,一次添加一行;例如,SELECT COUNT(*) FROM A,然后是A JOIN B,然后是A JOIN B JOIN C,依此类推,以检测违规的JOIN

票数 1
EN

Stack Overflow用户

发布于 2015-09-18 20:14:25

您需要在Where条件之后添加以下内容,例如

代码语言:javascript
复制
AND gameday.atbats.Id = Gameday.pitches.GameAtBatID      
AND batters.ID = gameday.atbats.batters
票数 0
EN

Stack Overflow用户

发布于 2016-05-06 14:30:52

在最后一行的查询中,您已经使用游戏名称编写了where条件,如果游戏名称不是唯一的,那么您将获得多个答案,因此在gameday.atbats表的where条件中使用主键是更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28731514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档