SQL.ANSI子查询连接 ANSI子查询连接

问题描述 投票:0回答:1

我在雪花中练习子查询(它支持常见的SQL查询)。我卡住了,无法得到我想要的结果。

资料

INSERT INTO members (memid, surname, firstname, address, zipcode, telephone, recommendedby, joindate) VALUES
(12, 'Baker', 'Anne', '55 Powdery Street, Boston', 80743, '844-076-5141', 9, '2012-08-10 14:23:22'),
(21, 'Mackenzie', 'Anna', '64 Perkington Lane, Reading', 64577, '(822) 661-2898', 1, '2012-08-26 09:32:05'),
(6, 'Tracy', 'Burton', '3 Tunisia Drive, Boston', 45678, '(822) 354-9973', NULL, '2012-07-15 08:52:55');

我想得到每个会员的名字,会员ID,推荐人的名字和推荐人的ID。

我的代码

with recommender as (
select distinct concat(t1.firstname, ' ', t1.surname) recommender
        , memid recommender_id
    from "EXERCISES"."CD"."MEMBERS" t1
where exists (select surname from "EXERCISES"."CD"."MEMBERS" t2
              where t1.memid = t2.recommendedby)
)
, member as (
select 
    distinct concat(firstname, ' ', surname) as member,
    memid,
    recommender,
    recommender_id
from recommender 
left join "EXERCISES"."CD"."MEMBERS" t3 on recommender.recommender_id = t3.recommendedby 
) select * from member
order by member;

我的输出enter image description here

注意到Burton Tracy在输出中不见了,因为她没有任何推荐人。我想在输出中保留她的数据。我应该如何重写我的代码?

谅谅

sql
1个回答
2
投票

我不太清楚为什么你要用CTE来做这个...?或者子查询,对于这个问题。

获取重新推荐会员的人不超过一个LEFT JOIN。

select
  concat(m.firstname, ' ', m.surname) as member,
  m.memid member_id,
  concat(r.firstname, ' ', r.surname) as recommender
  r.memid recommender_id
from
  members m
  left join members r on r.memid = m.recommendedby
© www.soinside.com 2019 - 2024. All rights reserved.