0

次の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) );

また、各チームのメンバー数をリストする次のクエリもあります。

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

しかし、私は 4 つのチーム (MRT1、MRT2、MRT3、MRT4) を持っています。テーブル内のメンバーはチーム 2 と 3 にのみ属しているため、クエリを実行すると次の出力が得られます。

MRT2: 7、MRT3: 14

次のように、クエリを調整して 4 つのチームすべてを一覧表示する方法がわかりません。

MRT1: 0、MRT2: 7、MRT3: 14、MRT4: 0

これを修正するためにサブクエリをいじっていますが、運がありません。何か案は?ありがとう

4

4 に答える 4

5

MemberでJOINしているTEAMから選んでみる

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

これが何をしているのかについての背景を説明するだけです。

それは言う

チームのすべてのチーム ID を教えてください。一致がない場合でも、メンバー テーブル内の一致をそれぞれカウントします。

使用する場合

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

これは次のように変換されます

チームのすべてのチーム ID を教えてください。それぞれのチーム ID について、メンバー テーブル内の一致をカウントしますが、一致がある場合のみです。

于 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 に答える