ВЫБРАТЬ с различными значениями внешнего ключа

голоса
0

У меня есть 2 таблицы:

Products(..., category_id)
Categories(id, name, level_1_parent_id, level_2_parent_id)

category_id является внешним ключом для Categories(id)

Если это первая категория уровня level_1_parent_idявляется NULL,
если вторая категория уровня level_2_parent_idявляется NULL, level_1_parent_idустанавливаются,
если третий уровень оба установлены.

Я выбор продуктов, как это

SELECT *
FROM Products
WHERE category_id = ${category_id}

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

Так, например , если я выбрать из категории с id == 1(это первый идентификатором уровня) Я хочу , чтобы выбрать продукты с category_idравными 1и другими категориями с level_1_parent_id == 1и то же самым для второй категории уровня.

Возможно ли это каким-то образом?

Задан 02/06/2018 в 15:45
пользователем
На других языках...                            


2 ответов

голоса
0

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

SELECT *
FROM Categories c1
LEFT JOIN Categories c2
    ON c2.level_1_parent_id = c1.id
LEFT JOIN Categories c3
    ON c3.level_1_parent_id = c1.id AND c3.level_2_parent_id = c2.id
JOIN Products p
    ON p.category_id = c1.id OR p.category_id = c2.id OR p.category_id = c3.id
WHERE c1.category_id = ${category_id}
Ответил 02/06/2018 в 16:37
источник пользователем

голоса
1

мы можем использовать вложенный запрос здесь.

SELECT * FROM Products WHERE category_id = $ {category_id} или
category_id в (выберите отчетливый идентификатор из категорий , где level_1_parent_id = $ {category_id} или level_2_parent_id = $ {category_id})

Ответил 02/06/2018 в 16:40
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more