Запрос SQL: как сделать определенный выбор с несколькими таблицами и вычислить? - PullRequest
2 голосов
/ 18 августа 2011

Вот моя проблема.У меня есть 4 таблицы в базе данных Oracle:

  • Team (teamID, teamName)
  • TeamMembers (membersID, teamID, membersStatusID)
  • Members (membersID, membersName)
  • Статус (membersStatusID, statusName)

Мне нужно получить teamName, номера teamMembers в этих командах и имена участников, которые имеют статус«Капитан» ... все это в одном SELECT в SQL.

Много часов на это и нет решения ... есть идеи?

Редактировать: Мне нужно увидеть все команды, даже если в нем нет участников.

Ответы [ 4 ]

0 голосов
/ 18 августа 2011

Я не могу проверить этот выбор сейчас, но вы можете попробовать это:

select team.teamName,count(distinct members.membersID) numMembers,
MAX(CASE when status.statusName='CAPTAIN' then members.membersname else null END) Captain
from team,teammembers,members,status 
where team.teamID=teammembers.teamID(+)
and teammembers.membersID=members.membersID(+)
and teamMembers.memberStatusID=status.memberstatusID(+)
group by team.teamName;
0 голосов
/ 18 августа 2011
select t.team_id, t.teamName, count(tm.teamid), m.membersname
from team t, teammembers tm, members m, status s
where t.teamid = tm.teamid (+)
and tm.membersid = m.membersid (+)
and m.membersstatusid = s.statusid (+)
and s.statusname = 'Captain'
group by t.team_id, t.teamName, m.membersname
0 голосов
/ 18 августа 2011
SELECT
teamName,
b.[Number Of Members],
c.membersName AS [Captian]
FROM
Team
LEFT JOIN
(
SELECT
    COUNT(*) AS [Number Of Members],
    teamID
FROM
    TeamMembers
GROUP BY
    teamID
) AS b ON Team.teamID = c.teamID
LEFT JOIN
(
SELECT
    membersName,
    teamID
FROM
    Members
INNER JOIN
    TeamMembers ON Members.membersID = TeamMembers.membersID
INNER JOIN
    Status ON TeamMembers.memberStatusID = Status.memberStatusID AND Status.statusName = 'Captian'
) AS c ON c.teamID = Team.teamID

Может работать. Может потребоваться настроить его, хотя из-за группы в утверждении b select. Также я написал это только в SQL, так как я не знаю синтаксис оракула

0 голосов
/ 18 августа 2011

Я немного заржавел в своем оракуле, поэтому здесь могут быть небольшие проблемы с синтаксисом, но я попробую:

SELECT t.teamName,
  count(*) AS teamMembers,
  c.membersName as teamCaptain
FROM team t
  INNER JOIN TeamMembers tm ON tm.teamID = t.teamID
  LEFT JOIN Members m ON m.membersID = tm.membersID
  LEFT JOIN TeamMembers tmc ON tmc.teamID = t.teamID AND tmc.memberStatusID = "Captain"
  LEFT JOIN Members c ON c.membersID = tmc.membersID
  GROUP BY t.teamName, c.membersName

Редактировать: Забыл строку GROUP BY!

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