使用不同的外键值选择

gmol1639  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(207)

我有两张table:

Products(..., category_id)
Categories(id, name, level_1_parent_id, level_2_parent_id)
``` `category_id` 是的外键 `Categories(id)` 如果是一级分类的话 `level_1_parent_id` 为空,
如果是二级分类 `level_2_parent_id` 为空, `level_1_parent_id` 已设置,
如果第三级都设置了。
我在挑选这样的产品

SELECT *
FROM Products
WHERE category_id = ${category_id}

我需要实现的是:从子类别中选择产品(如果是第一级或第二级类别)。
例如,如果我从类别中选择 `id == 1` (这是第一级id)我想选择具有 `category_id` 等于 `1` 以及其他具有 `level_1_parent_id == 1` 二级分类也一样。
有可能吗?
brccelvz

brccelvz1#

通过先将表连接到表本身,然后获取与找到的每个类别相关联的产品,可以获得类别列表。请注意,对于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}
mw3dktmi

mw3dktmi2#

我们可以在这里使用嵌套查询。
从category\u id=${category\u id}或
中的类别\u id(从级别\u 1\u父级\u id=${category\u id}或级别\u 2\u父级\u id=${category\u id}的类别中选择不同的id)

相关问题