如何针对以下场景进行MySQL查询?

时间:2018-03-10 08:00:05

标签: mysql sql database

我有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。

请帮助,谢谢。

1 个答案:

答案 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。*)