НачатьНачать бесплатно

Все возможные родители в одном поле?

Ваше финальное задание в этой главе — найти всех возможных родителей, начиная с одного ID, и объединить идентификаторы всех найденных поколений в одно поле.

Для этого вы будете рекурсивно искать всех возможных членов семьи и добавлять эту информацию в одно поле. Чтобы объединить ID в строку, используйте оператор CAST(). Поиск членов семьи начнётся с ID = 290. Всего в таблице family содержится 300 записей.

Это упражнение является частью курса

Иерархические и рекурсивные запросы в SQL Server

Посмотреть курс

Инструкции к упражнению

  • Укажите ParentID равным 290 в качестве начальной точки.
  • Если Parent.ID = '' в операции CASE, задайте полю Parent значение текущего ParentID.
  • Если Parent.ID <> '' в операции CASE, добавляйте ID родителя к текущему значению Parent на каждой итерации.
  • Выберите поля Name и Parent из определённого CTE.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

WITH tree AS (
	SELECT 
  		ID,
  		Name, 
  		ParentID, 
  		CAST('0' AS VARCHAR(MAX)) as Parent
	FROM family
  	-- Initialize the ParentID to 290 
  	WHERE ___ = ___    
    UNION ALL
    SELECT 
  		Next.ID, 
  		Next.Name, 
  		Parent.ID,
    	CAST(CASE WHEN Parent.ID = ''
        	      -- Set the Parent field to the current ParentID
                  THEN(CAST(Next.___ AS VARCHAR(MAX)))
        	 -- Add the ParentID to the current Parent in each iteration
             ELSE(Parent.Parent + ' -> ' + CAST(Next.___ AS VARCHAR(MAX)))
    		 END AS VARCHAR(MAX))
        FROM family AS Next
        	INNER JOIN tree AS Parent 
  			ON Next.ParentID = Parent.ID)
        
-- Select the Name, Parent from tree
SELECT ___, ___
FROM ___;
Редактировать и запускать код