我正在尝试获取产品name
和categ_id
。我有两张桌子,
product_template
categ_id name
7 Nokia classic
7 Nokia lumia
8 samsung s3
6 huawai
此表格包含我想要的product
,
product_category
id name parent_id
6 phones 3
7 nokia 6
8 samsung 6
此表显示哪个产品位于phone > nokia
和phone > samsung
下,或者产品可以直接在电话下显示,
等
phones > huawai
phones > nokia > Nokia classic
phones > nokia > Nokia lumia
phones > samsung > samsung s3
我正在使用的查询是,
select pt.categ_id,pt.name from product_template pt inner join product_category pc on
pt.categ_id=pc.id where pc.parent_id='6'
显示除huawai
???
查询的运行方式应该可以直接获得phone
下的产品phone > nokia > Nokia Classic
提前感谢您的建议。
答案 0 :(得分:4)
如果您只想获取某个类别下的模板以及该类别的子类别下的模板,请使用该查询:
select pt.categ_id, pt.name
from product_template pt
inner join product_category pc on pt.categ_id = pc.id
where '6' in (pc.id, pc.parent_id)
但是,它仅选择所选类别的1个级别范围内的模板。如果您想选择所有后代类别'模板,您可以使用recursive common table expression:
with recursive rpc(id) AS (
select '3'::int
union all
select id
from product_category pc
where pc.parent_id = rpc.id
)
select pt.categ_id, pt.name
from product_template pt
inner join rpc on pt.categ_id = rpc.id