SELECT с разными значениями для внешнего ключа

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 и теми же для категории второго уровня.

Это возможно как-то?

Теги:
database

2 ответа

1
Лучший ответ

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

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

  • 0
    работает как шарм! Большое спасибо!
0

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

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}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню