我有3张桌子。
1. inventory - inventory_subcat_id as fk
2. inventory_cat
3. inventory_subcat - cat_id as fk
现在,如果我想从某个类别获取库存,如何构建我的查询?
注意:我的库存表中只有subcat_id,这是inventory_subcat表中id的fk。 inventory_subcat有cat_id,它是inventory_cat中id的fk。
让我们说,
inventory_cat has
{id=> 1, name=> A}
{id=> 2, name=> B}
inventory_subcat has
{id=> 1, cat_id=> 1, name=> subcatA}
{id=> 2, cat_id=> 1, name=> subcatB}
{id=> 3, cat_id=> 2, name=> subcatC}
所以现在subcatA和subcatB都属于名为A的猫。
now if i have inventory
{id=> 1, subcat_id=> 1, name=> inv1}
{id=> 2, subcat_id=> 2, name=> inv2}
{id=> 3, subcat_id=> 3, name=> inv3}
现在,如果我想从猫A获得所有库存物品,那就是
{id=> 1, subcat_id=> 1, name=> inv1}
{id=> 2, subcat_id=> 2, name=> inv2}
因为cat_id 1的subcat_id 1和2 bellongs。
请帮助,谢谢。
答案 0 :(得分:0)
您可能还希望向库存清单添加inventory_cat的外键。
至于你当前的布局,为了从库存到inventory_cat,你只需要做两个连接:一个在inventory和inventory_subcat之间(因为你需要inventory_subcat.cat_id),然后一个在inventory_subcat和inventory_cat之间(因为你需要inventory_cat.name)。
您的查询将如下所示:
SELECT i.*
FROM inventory_cat c
INNER JOIN inventory_subcat s ON s.cat_id = c.id
INNER JOIN inventory i ON i.subcat_id = s.id
WHERE c.name = 'A';
将表格加在一起后,您的数据将如下所示:
[c.id] [c.name] [s.id] [s.cat_id] [s.name] [i.id] [i.subcat_id] [i.name]
1 A 1 1 subcatA 1 1 inv1
1 A 2 1 subcatB 2 2 inv2
2 B 3 2 subcatC 3 3 inv3
此时,您只选择类别'A'(WHERE c.name ='A')的行,并仅显示库存列(SELECT i。*)