Отображение данных с нулевым значением в запросе SQL? - PullRequest
0 голосов
/ 14 мая 2009

У меня есть следующие две таблицы (упрощенно для этого вопроса):

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, поэтому при выполнении запроса я получаю следующий вывод:

MRT2: 7, MRT3: 14

Я не уверен, как я могу настроить свой запрос, чтобы перечислить все 4 команды следующим образом:

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

Я возился с подзапросами, чтобы исправить это без какой-либо удачи. Есть идеи? Спасибо

Ответы [ 4 ]

5 голосов
/ 14 мая 2009

попробуйте выбрать из команды, оставленной присоединиться к члену

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

Просто чтобы дать вам представление о том, что он делает.

Там написано

Дайте мне все teamids от команды, а затем для каждого подсчитайте совпадения в таблице участников, даже если совпадений нет.

если вы используете

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

это переводится как

Дайте мне все teamids от команды, а затем для каждого подсчитайте совпадения в таблице участников, но только если есть совпадения.

3 голосов
/ 14 мая 2009
SELECT teamID, count(memberID) AS [noOfMembers]
FROM team
LEFT JOIN member
ON team.teamID = member.teamID
GROUP by teamID;
2 голосов
/ 14 мая 2009

Я сделал этот тест, и работал для меня

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;
0 голосов
/ 14 мая 2009

Правильное соединение с таблицей TEAM должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...