Запрос Oracle SQL — заменить идентификатор по имени

#sql #oracle #inner-join #self-join

#sql #Oracle #внутреннее соединение #самосоединение

Вопрос:

У меня есть таблица group , содержащая группы с их родительской группой:

 groupid   name   parentid
-------------------------
   1      test       1 
   2      second     1
   3      3rd        1
   4      next       2
  

Как я могу запросить эту таблицу, чтобы получить такой результат (имя вместо идентификатора)

 groupid   name     parent
---------------------------
   1      test     test
   2      second   test
   3      3rd      test
   4      next     second
  

Ответ №1:

Это самосоединение:

 select t.groupid, t.name, p.name parentname
from mytable t
inner join mytable p on p.groupid = t.parentid
  

Если у вас отсутствует parentid s, вместо этого используйте a left join .

Комментарии:

1. @ChristianTimm: знаете ли вы, что принятый вами ответ в точности совпадает с моим и был опубликован 10 минут спустя?

Ответ №2:

Вы можете использовать следующий запрос:

 select A.groupid, A.name, B.name as parentid
from group A
left join group B on A.groupid = B.parentid
  

Комментарии:

1. Спасибо! Это работает нормально, и теперь я могу реализовать это для большего запроса. Позиция в порядке? [ code ]выберите PPOM_USER.PUSER_ID, PPOM_USER.PUSER_NAME, PPOM_GROUP. PNAME, p.PNAME из PPOM_GROUP полное внешнее соединение (PPOM_USER полное внешнее соединение PPOM_MEMBER на PPOM_USER. PUID = PPOM_MEMBER.RUSERU ) в PPOM_GROUP. PUID = PPOM_MEMBER.RGROUPU слева присоединяется к PPOM_GROUP p на p.PUID = PPOM_GROUP. RPARENTU[ /code ]