需要一些SQL自连接逻辑(通过SQLZoo)的帮助?

时间:2014-12-16 18:03:35

标签: sql mariadb

我正在研究自我加入,在这个问题上:

SELECT a.company, a.num, stopa.name, stopb.name
FROM route a JOIN route b ON
  (a.company=b.company AND a.num=b.num)
  JOIN stops stopa ON (a.stop=stopa.id)
  JOIN stops stopb ON (b.stop=stopb.id)
WHERE stopa.name='Craiglockhart'
    AND  stopb.name='London Road'

is #6 on this website

我不明白为什么我们使用这个条款:

  (a.company=b.company AND a.num=b.num)

如果我们要检查两个不同的站点 - 'Craiglockhart'和'London Road',那么我们为什么要使用a.company = b.companya.num = b.num

I.E为什么不简单:

a.stop = b.stop

注意:当我问这个问题时,答案就出现了。所以我决定完成并发布一个答案,供自我参考

2 个答案:

答案 0 :(得分:0)

原因是因为当我们SELF-JOIN时,我们需要仔细查看我们正在加入的表格的结构。

在此示例中,numcompany列将保持不变,但stop列会发生变化。

即如果我们使用hte子句r1.stop = r2.stop加入,那就没有任何意义,因为我们被困在一个停止

答案 1 :(得分:0)

为什么你使用自我加入我们不知道。自己加入主要用于父子关系表。 对于U r Case,您可以轻松获取数据

    SELECT a.company, a.num, stopa.name
    FROM route a 
    JOIN stops stopa ON (a.stop=stopa.id) 
    WHERE stopa.name='Craiglockhart'
          OR  stopa.name='London Road'