0

我有以下两个表(针对这个问题进行了简化):

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,因此当我运行查询时,我得到以下输出:

捷运2:7,捷运3:14

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

捷运1:0,捷运2:7,捷运3:14,捷运4:0

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

4

4 回答 4

5

尝试从 TEAM left JOIN-ing on Member 中选择

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

只是为了给你一些关于这是做什么的背景。

它说

给我团队中的所有团队成员,然后为每个成员计算成员表中的匹配项,即使没有匹配项也是如此。

如果你使用

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

这转化为

给我团队中的所有团队成员,然后为每个成员计算成员表中的匹配项,但前提是有匹配项。

于 2009-05-14T12:49:57.847 回答
3
SELECT teamID, count(memberID) AS [noOfMembers]
FROM team
LEFT JOIN member
ON team.teamID = member.teamID
GROUP by teamID;
于 2009-05-14T12:51:52.647 回答
2

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

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;
于 2009-05-14T12:53:51.520 回答
0

对 TEAM 表的右连接应该可以解决问题。

于 2009-05-14T12:51:13.477 回答