2014-12-16 2 views
0

Я учусь Самосоединения, и по этому вопросу:Нужна помощь в SQL Self-join логике (через SQLZoo)?

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.company И a.num = b.num

то есть, почему это не просто:

a.stop = b.stop 

ПРИМЕЧАНИЕ: Когда я задавал этот вопрос, ответ пришел ко мне. Поэтому я решил закончить и опубликовать ответ, для саморекламы

+0

ПРИМЕЧАНИЯ: Я понял это, но хотел бы ответить на него в любом случае для самостоятельного изучения целей – Coffee

ответ

0

Причина в том, что когда мы SELF-JOIN, нам нужно внимательно рассмотреть структуру таблицы, в которую мы входим.

iE в этом примере столбцы num и company будут оставаться неизменными, однако изменяется столбец stop.

т.е. если мы спаянный пункт Hte r1.stop = r2.stop, то это не имело бы никакого смысла, потому что мы застряли на один остановке

0

Почему и использовать автообъединение мы не know.Self присоединиться используются в основном для родителей и детей таблица отношений. Для U г Ca легко U получить данные по

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' 
Смежные вопросы