#sql
#sql
Вопрос:
У меня есть две таблицы
Tab1
id Name Level
1 a1 1
2 a2 1
3 b1 2
4 b2 2
5 c1 3
6 c2 3
7 b3 2
8 c3 3
9 c4 3
Tab2
id linkid
1 3
3 6
1 7
7 8
3 9
Я пытаюсь получить разные уровни идентификатора, которые соответствуют уровню = 1
, что-то вроде
Tab3
Level1 Level2 Level3
1 3 6
1 7 8
1 3 9
Кто-нибудь может мне помочь?
Комментарии:
1. Я не понимаю логики в ваших результатах Tab3. Не могли бы вы немного развить?
Ответ №1:
Для представленных вами данных достаточно следующего утверждения …
Инструкция SQL
SELECT lvl1.id AS Level1
, lvl2.id AS Level2
, lvl3.id AS Level3
FROM Tab2 lvl1
INNER JOIN Tab2 lvl2 ON lvl2.id = lvl1.linkid
INNER JOIN Tab2 lvl3 ON lvl3.id = lvl2.linkid
WHERE lvl1.id = 1
… но я предполагаю, что вам каким-то образом нужно Tab1
включить в результаты, чтобы это могло быть ближе к тому, что вам действительно нужно
Инструкция SQL
SELECT lvl1.id AS Level1
, lvl2.id AS Level2
, lvl3.id AS Level3
FROM Tab1 t1
INNER JOIN Tab2 lvl1 ON lvl1.id = t1.id
INNER JOIN Tab2 lvl2 ON lvl2.id = lvl1.linkid
INNER JOIN Tab2 lvl3 ON lvl3.id = lvl2.linkid
WHERE t1.id = 1
обратите внимание, что я предполагаю Tab2.id
, что внешний ключ Tab1.id