首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自左外部联接的SQL练习

使用自左外部联接的SQL练习
EN

Stack Overflow用户
提问于 2020-05-15 20:24:08
回答 1查看 57关注 0票数 0

这是一个练习:如何输出所有成员的列表,包括推荐他们的个人(如果有的话)?确保结果按(姓、名)排序。

解决方案在下面--我不明白为什么它是'ON recs.memid = mems.recommendedby‘而不是'mems.memid =recs.reenddby’。为什么后者不起作用?我想纠正我关于如何使用左外连接的想法。

代码语言:javascript
复制
  CREATE TABLE members (
  memid SERIAL PRIMARY KEY,
  firstname VARCHAR(20),
  surname VARCHAR(20),
  recommendedby INTEGER References members(memid)
  );

  SELECT
  mems.firstname AS memfname, 
  mems.surname AS memsname, 
  recs.firstname AS recfname, 
  recs.surname AS recsname
FROM
  cd.members AS mems
LEFT OUTER JOIN cd.members AS recs
ON recs.memid = mems.recommendedby
ORDER BY memsname, memfname;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-15 22:09:02

考虑以下数据:

代码语言:javascript
复制
MEMID | FIRSTNAME | SURNAME | RECOMMENDEDBY
------|-----------|---------|--------------
1     | John      | Smith   | null
2     | Karen     | Green   | 1
3     | Peter     | Jones   | 1

这里约翰推荐了凯伦和彼得,但没有人推荐约翰。

'ON recs.memid = mems.recommendedby' (“工作”的那个)

你得到了一份会员名单和推荐他们的人。根据表结构,任何成员都只能由一个成员推荐,所以您只需要一次就可以得到所有成员。您正在获取推荐的值,并在“其他表”中的memid列中查找它:

代码语言:javascript
复制
recommendedby   --|-->  memid of members that recommended them
MEMID | FIRSTNAME | SURNAME | RECOMMENDEDBY
------|-----------|---------|--------------
Karen | Green     | John    | Smith
Peter | Jones     | John    | Smith
John  | Smith     | null    | null

推荐列只有John ( 1 ),所以当查找值1时,John就出现了。

'ON mems.memid = recs.recommendedby' (不起作用的那个)

你会再次得到所有的成员。但在这里,你得到了他们的推荐信,可以这么说。如果他们不推荐任何人,配对记录将是空白的。这是因为您正在获取memid值,并查看它是否与“其他表”的推荐表列相匹配。如果一个成员推荐了多个成员,则记录将多次显示:

代码语言:javascript
复制
memid           --|-->    recommendedby
MEMID | FIRSTNAME | SURNAME | RECOMMENDEDBY
------|-----------|---------|--------------
Karen | Green     | null    | null
Peter | Jones     | null    | null
John  | Smith     | Karen   | Green
John  | Smith     | Peter   | Jones

凯伦和彼得没有推荐任何人,但约翰推荐了其他人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61827764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档