我想将这两个查询的结果合并为一个结果。我尝试使用完全外部联接,但出现错误。
select MS.TeamID, count(MS.MemberID) as Number_Of_Members
from MEMBERSHIP MS
where MS.TeamID in
(select TeamID
from FRANCHISE_APP
where Status ='granted' or Status = 'Granted' or Status ='GRANTED')
group by TeamID;
select T.TeamID, T.TeamName, T.TeamLeaderID
from Team T
where T.TeamID in
(select TeamID
from FRANCHISE_APP
where Status ='granted' or Status = 'Granted' or Status ='GRANTED')
;
想要的结果:
|teamid|teanname |leadername|numberofmembers|
|------| ------- | -------- |---------------|
|T1 | TI | Justin |4 |
|T2 | MT | Danny |3 |
答案 0 :(得分:0)
基于所提供的有限信息;对以下 SQL 的一些更改应该可以工作。
With A as (
select
MS.TeamID,
count(MS.MemberID) as Number_Of_Members
from
MEMBERSHIP MS
where
MS.TeamID in (
select
TeamID
from
FRANCHISE_APP
where
Status = 'granted'
or Status = 'Granted'
or Status = 'GRANTED'
)
group by
TeamID
),
B as (
select
T.TeamID,
T.TeamName,
T.TeamLeaderID
from
Team T
where
T.TeamID in (
select
TeamID
from
FRANCHISE_APP
where
Status = 'granted'
or Status = 'Granted'
or Status = 'GRANTED'
)
)
Select
A.teamID,
B.teamname,
B.TeamLeaderID,
A.Number_Of_Members
from
A,
B
where
a.teamID = B.teamId;
答案 1 :(得分:0)
加入这两个查询相当简单:
select coalesce(t.teamid, t.teamid) as teamid,
t.teamname,
t.teamleaderid,
m.number_of_members
from (<query 1>) m
full outer join (<query 2>) t
on t.teamid = m.teamid;
包含您的查询的是:
select coalesce(t.teamid, t.teamid) as teamid,
t.teamname,
t.teamleaderid,
m.number_of_members
from (
select MS.TeamID, count(MS.MemberID) as Number_Of_Members
from MEMBERSHIP MS
where MS.TeamID in
(select TeamID
from FRANCHISE_APP
where Status ='granted' or Status = 'Granted' or Status ='GRANTED')
group by TeamID
) m
full outer join (
select T.TeamID, T.TeamName, T.TeamLeaderID
from Team T
where T.TeamID in
(select TeamID
from FRANCHISE_APP
where Status ='granted' or Status = 'Granted' or Status ='GRANTED')
) t
on t.teamid = m.teamid;
我使用了coalesce,因为对于一个完整的外连接,两个团队ID 都可能为空,所以你想显示哪个不是。
<块引用>可以在一个查询中完成吗?
两个查询都引用 franchise_app
- 这可以通过连接而不是 in()
完成 - 因此您可以将其用作初始表,然后将外部连接保留到其他两个表:
select fa.teamid, t.teamname, t.teamleaderid, count(m.memberid) as number_of_members
from franchise_app fa
left join team t on t.teamid = fa.teamid
left join membership m on m.teamid = fa.teamid
where upper(fa.status) = 'GRANTED'
group by fa.teamid, t.teamname, t.teamleaderid
order by fa.teamid;
您似乎总是有一个团队行,因此这可能是一个内部联接,但您可能不知道。
db<>fiddle 用一些虚构的数据来得到你想要的结果;这两个查询都得到:
TEAMID TEAMNAME TEAMLEADERID NUMBER_OF_MEMBERS
------ -------- ------------ -----------------
T1 TI Justin 4
T2 MI Danny 3
我还更改了状态检查以查找“granted”大写的任何变化;尽管使用函数会阻止使用该列的索引。但是,具有不同的大小写表明存在数据模型问题 - 应该限制允许的值,通过与列出它们的另一个表的关系的约束。但这是一个单独的问题...