Запросить получение категорий документов (с их родителями), только если категория действительно содержит документы? - PullRequest
0 голосов
/ 28 июля 2011

В моем приложении «документ» - это просто табличная запись информации.Вот таблицы (некоторые упрощенно)

Таблица документов

  • DocId int PK
  • Заголовок
  • Содержимое
  • Дата загрузки
  • и т. Д. *

Таблица категорий документов

  • CatId
  • ParentId
  • Имя
  • и т. Д....

Таблица DocCats (объединяющая таблица)

  • DocId PK
  • CatId PK

При соответствующих отношениях какЧто ж.«Документы» разбиваются на категории путем внесения записи в таблицу DocCats (DocId документа, CatId категории).Категории могут иметь родительские категории, отмеченные полем ParentId.Если ParentId равен 0, категория является родительской категорией.

Я хотел бы получить все категории, которые на самом деле содержат документ, с одной оговоркой: мне также нужна родительская категория.

Ответы [ 2 ]

1 голос
/ 28 июля 2011
SELECT cat.Name, parent.Name
FROM DocumentCategories AS cat
  LEFT JOIN DocumentCategories as parent ON (cat.ParentId = parent.CatId)
  LEFT JOIN (SELECT DISTINCT CatID FROM DocCats) AS doc ON (cat.CatId = doc.CatId)
WHERE (doc.CatId IS NOT NULL)
1 голос
/ 28 июля 2011

Быстрый ввод, так что я не могу гарантировать, что это абсолютно без ошибок, но это должно быть общей идеей. Соедините категории обратно с самим собой, чтобы получить родительское имя, а затем проверьте наличие исходной категории в таблице DocCats.

select
    cat.Name, parent.Name
from
    DocumentCategories cat
    inner join DocumentCategories parent
        on  parent.CatId = case when cat.ParentId = 0 then cat.CatId else cat.ParentId end
where
    exists (
        select 1
        from 
            DocCats dc
        where
            dc.CatId = cat.CatId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...