使用不同的外键值进行SELECT

时间:2018-06-02 16:45:16

标签: mysql database

我有两张桌子:

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

category_idCategories(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的类别(这是第一级ID),我想选择category_id等于1的产品和其他带{的类别{1}}和第二级别类别相同。

这有可能吗?

2 个答案:

答案 0 :(得分:1)

我们可以在这里使用嵌套查询。

  

SELECT * FROM Products WHERE category_id = $ {category_id}或
   category_id in(从category_1_parent_id = $ {category_id}或level_2_parent_id = $ {category_id}中选择不同的ID)

答案 1 :(得分: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}