我有两张桌子:
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选择其他类别,第二级类别也是如此。
这有没有可能呢?
发布于 2018-06-03 01:37:55
您首先通过将表连接到自身来获得类别列表,然后获取与找到的每个类别相关联的产品。注意,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}https://stackoverflow.com/questions/50659087
复制相似问题