代码之家  ›  专栏  ›  技术社区  ›  StormFoo

在SQL查询中显示零值数据?

  •  0
  • StormFoo  · 技术社区  · 17 年前

    我有以下两个表格(简化了这个问题):

    CREATE TABLE team (
     teamID CHAR(6) NOT NULL PRIMARY KEY); 
    
    CREATE TABLE member (
     memberID CHAR(7) NOT NULL PRIMARY KEY,
     teamID CHAR(6) NOT NULL REFERENCES team(teamID) );
    

    SELECT teamID, count(memberID) AS [noOfMembers]
    FROM member
    GROUP by teamID;
    

    然而,我有四个团队(MRT1、MRT2、MRT3和MRT4)。我表中的成员只属于团队2和团队3,因此当我运行查询时,我会得到以下输出:

    我不确定如何调整我的查询以列出所有4个团队,如下所示:

    MRT1:0, MRT2:7,

    我一直在处理子查询来解决这个问题,但没有任何运气。有什么想法吗?谢谢

    4 回复  |  直到 17 年前
        1
  •  5
  •   Johnno Nolan    17 年前

    尝试从团队左侧选择加入成员

    SELECT Team.Teamid, count(memberid)
    FROM 
        TEAM
    LEFT OUTER JOIN 
         Member on Member.teamid = Team.Teamid
    GROUP by Team.Teamid
    

    只是想给你一些关于这是怎么回事的背景知识。

    上面说

    给我团队中的所有团队ID,然后对每个团队ID计算成员表中的匹配项,即使没有匹配项。

    如果你使用

    SELECT Team.Teamid, count(memberid)
    FROM 
        TEAM
    INNER JOIN 
         Member on Member.teamid = Team.Teamid
    GROUP by Team.Teamid
    

    这意味着

        2
  •  3
  •   dpmattingly    17 年前
    SELECT teamID, count(memberID) AS [noOfMembers]
    FROM team
    LEFT JOIN member
    ON team.teamID = member.teamID
    GROUP by teamID;
    
        3
  •  2
  •   Jhonny D. Cano -Leftware-    17 年前

    我做了这个测试,为我工作

    CREATE TABLE team (
     teamID CHAR(6) NOT NULL PRIMARY KEY); 
    
    CREATE TABLE member (
     memberID CHAR(7) NOT NULL PRIMARY KEY,
     teamID CHAR(6) NOT NULL REFERENCES team(teamID) );
    
    INSERT INTO team (teamID) VALUES ('T1')
    INSERT INTO team (teamID) VALUES ('T2')
    INSERT INTO team (teamID) VALUES ('T3')
    INSERT INTO team (teamID) VALUES ('T4')
    
    INSERT INTO member (memberID, teamID) VALUES ('M1', 'T1')
    INSERT INTO member (memberID, teamID) VALUES ('M2', 'T1')
    INSERT INTO member (memberID, teamID) VALUES ('M3', 'T1')
    INSERT INTO member (memberID, teamID) VALUES ('M4', 'T3')
    
    SELECT Team.teamID, count(member.memberID) AS [noOfMembers]
    FROM Team LEFT JOIN member ON Member.teamID = Team.teamID
    GROUP BY ALL Team.teamID;
    
        4
  •  0
  •   KevB    17 年前

    正确连接到团队表应该可以解决此问题。