Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL请求:如何使用多表和计算器进行特定选择?_Sql_Oracle - Fatal编程技术网

SQL请求:如何使用多表和计算器进行特定选择?

SQL请求:如何使用多表和计算器进行特定选择?,sql,oracle,Sql,Oracle,这是我的问题。我在Oracle数据库上有4个表: 团队(团队ID、团队名称) 团队成员(membersID、teamID、membersStatusID) 成员(成员SID、成员名称) 状态(membersStatusID、statusName) 我需要获得团队名称、这些团队中团队成员的数量、以及具有“队长”身份的成员的姓名。。。所有这些都集中在一个中,在SQL中选择 在这个问题上花了很多时间,却没有解决方案。。。有什么想法吗 编辑:我需要查看所有团队,即使其中没有成员。我对我的oracle

这是我的问题。我在Oracle数据库上有4个表:

  • 团队(团队ID、团队名称)
  • 团队成员(membersID、teamID、membersStatusID)
  • 成员(成员SID、成员名称)
  • 状态(membersStatusID、statusName)
我需要获得
团队名称
、这些团队中
团队成员的数量
、以及具有“队长”身份的成员的姓名。。。所有这些都集中在一个
中,在SQL中选择

在这个问题上花了很多时间,却没有解决方案。。。有什么想法吗


编辑:我需要查看所有团队,即使其中没有成员。

我对我的oracle有些生疏,因此这里可能有一些轻微的语法问题,但我会尝试一下:

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

编辑:忘记按行分组

我对我的oracle有点生疏,所以这里可能有一些轻微的语法问题,但我将尝试一下:

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
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
编辑:忘记按行分组

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
可能有用。但是可能需要调整它,因为b select语句中有group by。我也只是用sql写的,因为我不知道oracle语法


可能有用。但是可能需要调整它,因为b select语句中有group by。另外,由于我不知道oracle语法,所以我仅用sql编写了这篇文章。我现在无法测试此选择,但您可以尝试以下方法:

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;

我现在无法测试此选择,但您可以尝试以下操作:

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;

每个队只有一名队长吗?每个队没有队长或只有一名队长吗?每个队只有一名队长吗?每个队没有队长或只有一名队长吗?请确定您需要在某处集合。:)谢谢大家!我已经看过了最后一个解决方案,它是有效的。我刚刚用一个“左连接”替换了“内部连接”,让所有团队都参与选择。最后一个问题,计数(*)总是从1开始。是否可以为没有成员的团队设置“0”?尝试将count(*)替换为count(m.membersID)非常确定您需要某个地方的组。:)谢谢大家!我已经看过了最后一个解决方案,它是有效的。我刚刚用一个“左连接”替换了“内部连接”,让所有团队都参与选择。最后一个问题,计数(*)总是从1开始。对于没有成员的团队是否可以使用“0”呢?尝试用count(m.membersID)替换count(*),如果你有这个句子(s.statusname='Captain'),我想你会有一个完整的连接。如果你有这个句子(s.statusname='Captain'),我想你会有一个完整的连接。