SQL Query Inner Присоединиться к заявлению?

Просто добавлен пример SQLFiddle с комментариями: http://sqlfiddle.com/#!3/d1cce

Я пытаюсь архивировать, чтобы получить большинство основных категорий в запросе (где Category.CategoryId = NULL )

ПУНКТ НАЗВАНИЯ:

  • 1 | НАЗВАНИЕ | 2
  • 1 | TITLE2 | 3

ТАБЛИЦА КАТЕГОРИИ:

  • 1 | Пример основной категории | НОЛЬ
  • 2 | Пример подкатегории | 1
  • 3 | Пример SubSubcategory | 2

РЕЗУЛЬТАТ ДОЛЖЕН БЫТЬ:

  • 1 | НАЗВАНИЕ | Пример основной категории
  • 2 | TITLE2 | Пример основной категории

Подобно:

 select item.id, item.title (MAIN category where CategoryId = NULL) from ..... 

Итак, как вы можете видеть, я могу установить Item.CategoryId в категорию, являющуюся категорией SUBSUB или SUB.

Но каждый раз, когда я хочу получить основную категорию в результате моего запроса

Как я могу это достичь?

И снова пример привел к тому, что я стал более ясным:

  • 1-Item 1-Main 2

Таблицы:

 create table Item ( Id INT IDENTITY(1,1) NOT NULL, CategoryId INT NOT NULL, Title VARCHAR(80) NOT NULL, PRIMARY KEY (id) ) insert into Itemvalues('Item 1', 5) create table Category ( Id INT IDENTITY(1,1) NOT NULL, Title VARCHAR(10) NOT NULL, CategoryId INT, PRIMARY KEY (id) ) insert into Category values('Main item 1', NULL) insert into Category values('Sub item under Main item 1', 1) insert into Category values('Main 2', NULL) insert into Category values(Sub item under 2', 2) insert into Category values('Subsub item under subitem 2', 4) 

Это хорошая работа для общих табличных выражений, которые хорошо подходят для иерархических структур данных.

 ;with cte as ( select Id as ItemId, Title as ItemTitle, CategoryId, 0 as Level from Item union all select cte.ItemId, cte.ItemTitle, c.CategoryId, cte.Level + 1 as Level from Category c inner join cte on c.Id = cte.CategoryId and c.CategoryId is not null ) select ItemId, ItemTitle, c.Title as CategoryTitle from cte inner join Category c on c.Id = cte.CategoryId where Level = (select Max(Level) from cte as cte1 where cte1.ItemId = cte.ItemId) 

Демо-версия SQL Fiddle

Interesting Posts

Сумма отрицательных и положительных чисел

Сколько кластерных индексов может быть в одной таблице?

Сводная таблица SQL с текстовыми строками

Как передать магические числа @VAR + в параметр хранимой процедуры в sql-скрипте?

Соединение таблицы включает строки, которые не имеют записи – SUM ()

Мощный инструмент управления для MySQL с аналогичными функциями для студии SQL Server Management

Определение удаленного перехода на летнее время в sql-сервере

Проблема с сервером Sql при восстановлении базы данных

Не удалось удалить дублируемую запись в SQL Server с помощью C #

Почему я получаю «Процедура или функция ожидает параметр»?

SQL Server: не удалось найти подготовленный оператор с дескриптором 10 из анализатора запросов

Удалить из оператора с помощью агрегатов в предложении HAVING SQL Server 2008

SQL: Combine Выберите счетчик (*) из нескольких таблиц

Нужно ли кэшировать DNS-строки подключения?

Лучший способ получить личность вставленной строки в Linked server?

Давайте будем гением компьютера.