Создание древовидной структуры с помощью курсора SQL [duplicate]

Если вы используете ActiveAdmin, не забывайте, что в блоке регистров модели есть также allow_params:

ActiveAdmin.register Api::V1::Person do
  permit_params :name, :address, :etc
end

Они должны быть установлены вместе с контроллерами:

def api_v1_person_params
  params.require(:api_v1_person).permit(:name, :address, :etc)
end

В противном случае вы получите сообщение об ошибке:

ActiveModel::ForbiddenAttributesError
1
задан Mahmoud Gamal 1 November 2012 в 09:02
поделиться

2 ответа

Попробуйте следующее:

;WITH FamilyCTE
AS
(
    SELECT 
      *, 
      CAST(NULL AS VARCHAR(50)) AS FatherName,  
      CAST(NULL AS VARCHAR(50)) AS MotherName, 0 AS Level
    FROM @FamilyTree
    WHERE FatherID IS NULL 
      AND MotherID IS NULL
    UNION ALL
    SELECT 
      f.ID, 
      f.Name AS ParentName, 
      f.MotherID, 
      f.FatherID, 
      c.Name AS FatherName, 
      c2.Name AS MotherName, 
      Level + 1
    FROM @FamilyTree AS F
    INNER JOIN FamilyCTE c ON F.FatherID = c.ID
    INNER JOIN @FamilyTree c2 ON f.MotherID = c2.ID
)

SELECT * FROM FamilyCTE

Демо

Если вы хотите получить точный результат, как то, что вы разместили в своем вопросе, просто игнорируете FatherName и MotherName и ограничить выделение в SELECT * FROM FamilyCTE столбцами, которые вы хотите выбрать, с стартовым отцом в анкерном запросе, например, с помощью WHERE ID = 1. Как в следующем демо:

DEMO

2
ответ дан Mahmoud Gamal 19 August 2018 в 19:22
поделиться
  • 1
    Большое спасибо Махмуду Гамалю !!! Мне нужно найти полное генеалогическое древо пользователя, который является внуком. Заранее спасибо!! – Kashmir Singh 1 November 2012 в 14:39
  • 2
    @ KashmirSingh - Это мое удовольствие. – Mahmoud Gamal 1 November 2012 в 14:41
  • 3
    Вышеуказанный ответ является идеальным. Но я хочу генеалогическое дерево пользователя, который является сыном, чтобы он мог видеть свое родословное дерево сверху донизу. – Kashmir Singh 2 November 2012 в 06:46
select t1.ID, t1.MotherID, 
t1.FatherID,
t1.name, 
t2.Name,
Level
from table1 t1
left outer join table2 t2 on t1.FatherID =t2.FatherID 
0
ответ дан jainvikram444 19 August 2018 в 19:22
поделиться
  • 1
    Нет, я смотрю что-то вроде генерации семейного дерева с помощью Common Table Expression. – Kashmir Singh 1 November 2012 в 08:31
Другие вопросы по тегам:

Похожие вопросы: