Mysql 为外键选择不同的值

Mysql 为外键选择不同的值,mysql,database,Mysql,Database,我有两张桌子: Products(..., category_id) Categories(id, name, level_1_parent_id, level_2_parent_id) category_id是Categoriesid的外键 如果它的第一级类别级别\u 1\u父级\u id为空, 如果二级类别级别\u 2\u父级\u id为空,则设置级别\u 1\u父级\u id, 如果设置了第三个级别,则两个级别都已设置 我选择这样的产品 SELECT * FROM Products WH

我有两张桌子:

Products(..., category_id)
Categories(id, name, level_1_parent_id, level_2_parent_id)
category_id是Categoriesid的外键

如果它的第一级类别级别\u 1\u父级\u id为空, 如果二级类别级别\u 2\u父级\u id为空,则设置级别\u 1\u父级\u id, 如果设置了第三个级别,则两个级别都已设置

我选择这样的产品

SELECT *
FROM Products
WHERE category_id = ${category_id}
我需要达到的目标是: 从子类别(如果是第一级或第二级类别)中选择产品

例如,如果我从id=1的类别中选择第一级id,我想选择类别id=1的产品和其他类别id=1的产品,第二级类别也是如此


这是可能的吗?

首先将表连接到表本身,然后获取与找到的每个类别关联的产品,从而获得类别列表。请注意,在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}

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

从产品中选择*,其中category_id=${category_id}或 类别\u id在中,从类别中选择不同的id,其中级别\u 1\u父级\u id=${category\u id}或级别\u 2\u父级\u id=${category\u id}