я есть рекурсивный таблицу категории и таблицу компании с полями, как:SQL оптимизации с анти присоединиться
category(id, name, parent) // parent is foreign key to category id :)
company(id, category_1, category_2, category_3) // category_* is foreign key to category id
категория дерево на глубине макс = 3;
категории ой -> категория су -> категория CZ
со знанием категорий компании всегда связанно с последней категорией (с3), я хочу все категории, что компания связана с (c1z, c2Z, c3z, c1y, c2y, c3y, c1x, c2x, c3x) для моей поисковой системы. // c1y является родителем category_1 и C1x является родителем родителя категории 1 ...
лучший запрос я придумал это:
SELECT
ID,
NAME
FROM category c3
WHERE ID IN (
select category_1 from company where id=:companyId
union
select category_2 from company where id=:companyId
union
select category_3 from company where id=:companyId
union
select parent from category where id in (
select category_1 from company where id=:companyId
union
select category_2 from company where id=:companyId
union
select category_3 from company where id=:companyId
)
union
select parent from category where id in (
select parent from category where id in (
select category_1 from company where id=:companyId
union
select category_2 from company where id=:companyId
union
select category_3 from company where id=:companyId
)
)
)
имеет столько дубликат в нем. один для категории_ * в компании. и один для повторения его несколько раз.
любой способ удалить все дубликаты?
--update--
Предположим, мы решаем category- * поля с помощью двух таблиц насчет рекурсивного проблемы с 3 уровнями категории?
, например, если имеется только одна категория, это будет выглядеть как
SELECT
ID,
NAME
FROM category
WHERE ID IN (
select category_1 from company where id=:companyId
union
select parent from category where id in (
select category_1 from company where id=:companyId
)
union
select parent from category where id in (
select parent from category where id in (
select category_1 from company where id=:companyId
)
)
);
Какая СУБД вы используете? Postgres? Oracle? –
SELECT DISTINCT ... –
Я использую oracle, но я не хочу, чтобы он был связан с базой данных, поэтому его очень можно изменить в функции. – alizelzele