SELECT с разными значениями для внешнего ключа - PullRequest
0 голосов
/ 02 июня 2018

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

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

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

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

ВЫБРАТЬ * ИЗ ПРОДУКТОВ, ГДЕ category_id = $ {category_id} или
category_id in (выберите отдельный идентификатор из категорий, где level_1_parent_id = $ {category_id} илиlevel_2_parent_id = $ {category_id})

0 голосов
/ 02 июня 2018

Вы получаете список категорий, сначала присоединяя таблицу к себе, а затем получаете продукты, связанные с каждой из найденных категорий.Обратите внимание на использование псевдонимов для каждой из таблиц в предложениях 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...