我有两个不同的表格,产品和库存。
基本上,我想要完成的是我需要遍历products表中的每一行并引用inventory表中的相应行。
我的目标是找出哪些产品的数量为0。
库存表每个产品ID都有多行。我面临的问题是,与特定产品相对应的所有库存行需要的数量为0才能使结果对我有用(这就是我想要的弄清楚)
现在,我只是循环遍历每个产品,然后执行第二个SQL语句,检查是否出现任何数量>所选产品的库存表中为0,但这不适用于我的分页脚本(产品表中的20k行,库存表中的更多行。不能同时显示所有产品)
答案 0 :(得分:1)
您应该在两个表之间预先形成内部联接,然后选择quantity == 0
的位置。
类似的东西:
select
products.*
from
products
where
(select sum(inventory.quantity) from inventory where products.id = inventory.productId) = 0
答案 1 :(得分:1)
伪代码
查询变为。
SELECT p.*, SUM(i.qty,0) as number_in_stock
FROM product p
INNER JOIN inventory i ON (i.product_id = p.id)
GROUP BY p.id
HAVING number_in_stock = 0
这会慢得多,因为只有在完成所有加入后才能工作。
如果在qty变为0时从表中删除库存行,则可以执行此查询,这要快得多:
SELECT p.*
FROM product p
LEFT JOIN inventory i ON (i.product_id = p.id)
WHERE i.id IS NULL
左连接在鞋店中执行此操作
product id name inventory id prod_id qty
------------------ -------------------
1 shoe 1 1 10
2 horse We have no horses, all nulls
3 boot 2 3 55
4 ferrari go to the cardealer, all nulls
现在我们需要做的就是选择一个字段中null
的所有行,这些行的库存通常不是null
。 Aha,主键永远不能为空,因此如果我们选择库存PK is null
的所有行,我们将拥有不在库存中的产品。