我是sql的初学者,尝试通过使用self两次来遵循这个提示,但是失败了。
找到两辆可以从Craiglockhart到Sighthill的巴士路线。请出示公共汽车号码。公司为第一班车,名称为换乘站,巴士号为。第二班公共汽车的伴郎。提示:自我连接两次,找到访问Craiglockhart和Sighthill的公共汽车,然后加入匹配的车站。
我的代码:
select
a.num, a.company, stopsc.name, c.num, c.company
from
route a
join route b
on (a.num=b.num and a.company=b.company) **From Craiglockhart to the transfer stop**
join route c
on (b.stop=c.stop) **to connect the transfer stop**
join route d
on (c.num=d.num and c.company=d.company) **From transfer stop to the final stop which is Sighthill**
join stops stopsa
on (a.stop=stopsa.id)
join stops stopsb
on (b.stop=stopsb.id)
join stops stopsc
on (c.stop=stopsc.id)
join stops stopsd
on (d.stop=stopsd.id)
where
stopsa.name='Craiglockhart'
and stopsd.name='Sighthill'
and a.num!=c.num **to delete the same route**
order by a.num请告诉我,我回答的逻辑错误是什么?我知道在sqlselfjoin上还有另一个答案,但我想知道我走错了哪一步。非常感谢!
发布于 2015-12-29 03:02:45
从我头上..。如果这是逐字SQL语句,则需要删除**注释**'s。
发布于 2017-02-18 16:31:28
and a.num!=c.num使用这段代码,我假设您正在尝试删除任何可能的1总线旅行。这一行代码有两个主要问题。
1)你正在阻止一家可能不同的公司加入同一个bus#。(尽管在这个问题中,这个逻辑错误没有任何区别)
2)虽然您确实删除了任何可能的1总线行程(不转移总线),但您不会删除重复的。(顺便提一句,你不可能乘坐1路巴士到目的地:D )
出现重复的原因是有些总线线路有重复的行。例如,如果您执行下面的代码,您将看到重复的。(就某条巴士线而言,同一站有多于1个入口)
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='London Road' AND a.num=35因此,要删除重复项,应该在代码的顶部编写。
select distinct
a.num, a.company, stopsc.name, c.num, c.company 最后,网站上有一个排序错误,其中num没有被正确地处理为整数,从而给出了错误的答案。因此,将此代码放入,您将得到“正确的答案”。
order by CAST(a.num as int)https://stackoverflow.com/questions/34503677
复制相似问题