我有两张桌子:
Products(..., category_id)
Categories(id, name, level_1_parent_id, level_2_parent_id)
category_id
是Categories(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}}和第二级别类别相同。
这有可能吗?
答案 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}