我正在研究自我加入,在这个问题上:
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'
我不明白为什么我们使用这个条款:
(a.company=b.company AND a.num=b.num)
如果我们要检查两个不同的站点 - 'Craiglockhart'和'London Road',那么我们为什么要使用a.company = b.company
和a.num = b.num
I.E为什么不简单:
a.stop = b.stop
注意:当我问这个问题时,答案就出现了。所以我决定完成并发布一个答案,供自我参考
答案 0 :(得分:0)
原因是因为当我们SELF-JOIN
时,我们需要仔细查看我们正在加入的表格的结构。
在此示例中,num
和company
列将保持不变,但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'