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}