SQL 关于自连接的连接条件问题

Jolene824 2021-04-02 05:39:34
SQLZOO的self join问题:

5. Execute the self join shown and observe that b.stop gives all the places you can get to from Craiglockhart, without changing routes. Change the query so that it shows the services from Craiglockhart to London Road。

答案:
SELECT a.company, a.num, a.stop, b.stop
FROM route a
JOIN route b ON (a.company = b.company AND a.num = b.num)
WHERE a.stop = 53 AND b.stop = 149

不明白的点:(a.company = b.company AND a.num = b.num)

各位大佬们,小女子最近在自学sql,然后在做这个练习题的时候不太明白这道题自连接为什么条件是a.company = b.company AND a.num = b.num,因为我之前学的时候好像都是连接条件都是1个的,现在这里放两个条件是要去重的作用吗?

按我自己的理解是,这里self join的连接条件如果替换成 a.company = b.company,就会出现一个笛卡尔乘积,会出现很多一样的行如果连接条件是 a.company = b.company AND a.num = b.num,就要company和num都一样,可以把一样的行去掉?

我的表述有段乱,sorry~有大神可以帮忙解惑一下吗?非常感谢!

...全文
395 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-04-10
  • 打赏
  • 举报
回复
这个特别好理解。 1、company:运营商名称 2、stop:站点(始发站和终点站都需要用到) 3、num:路线名称(也就是一条线路会产生多少stop,该字段也表示stop可存在哪条线路上) 4、情景如下: a. 当where 有了始发stop及终点stop时 b. 要抓出始发、终点之间产生了N条num c. 当num为多条时,匹配线路中最少stop的路线(就是join on的第二个条件线路号必须匹配)
chenghangstar 2021-04-07
  • 打赏
  • 举报
回复
应该是company和num能精确确定一条数据,如果只用company,比如这张表company为'AA'的数据有5条,自连接就会出来25条
RINK_1 2021-04-02
  • 打赏
  • 举报
回复
我的猜测就是,这张ROUTE表记录的是公共交通路线数据,company字段记录的是公共交通运营公司,比如AAA巴士公司,BBB巴士公司;而num就是公共交通工具的线路号,比如123路公交车、地铁8号线;stop记录的就是每条公共交通线路的停靠站点。 所以,a.company = b.company AND a.num = b.num就可能代表是同一家运营商同一条线路上,然后再用WHERE a.stop = 53 AND b.stop = 149就能查询到能以53站点为起点,149站点为终点的所有线路。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧