【发布时间】:2012-09-11 16:57:51
【问题描述】:
我有 3 张桌子:
- 订单:
- orders_id
- 购买日期
- ...
- orders_products:
- orders_products_id
- orders_id
- products_id
- 产品名称
- products_quantity
- ...
- products_warehouses:
- products_id
- warehouses_id
- product_quantity_in_warehouse
现在我想要一个包含以下信息的表格:
- 当前日期
- products_id
- 产品名称
- warehouses_id
- current_quantity_in_warehouse
- 昨天售出
到目前为止,我得到了以下内容:
SELECT DISTINCT CURRENT_DATE AS `date`
orpr.products_id AS products_id
orpr.products_name AS products_name
pwq.warehouses_id AS warehouses_id
pwq.products_quantity AS current_quantity_in_warehouse
( SELECT SUM(orpr.products_quantity)
FROM `products_warehouses` wpq
INNER JOIN `orders_products` orpr ON pwq.products_id = orpr.products_id
INNER JOIN `orders` or ON orpr.orders_id = or.orders_id
WHERE pwq.products_id = ??
AND pwq.warehouses_id = ?? ) AS sold_yeserday
FROM `orders_products` orpr
INNER JOIN `orders` or ON orpr.orders_id = or.orders_id
INNER JOIN `products_warehouses pwq ON pwq.products_id = orpr.products_id;
我想要的是 ?? 的位置,即 products_id 和 warehouses_id 与结果的每一行类似。
如果有人有一个更简单的例子来说明如何在选择中使用选择(内部选择使用其中的选择条件 ID,当然这会改变每一行),它也很好,只要因为我可以重现该示例来解决我的问题。
提前致谢,
问候, 凯文C
【问题讨论】:
-
这听起来像是一个相关的子查询,它有一些性能问题。将其转换为针对此聚合的连接可能更容易:
JOIN (SELECT products_id, warehouses_id, SUM(products_quantity) GROUP BY products_id, warehouses_id)。 -
您能预览一下您预期输出的一些虚拟数据吗?如果可能的话,请提供您在sqlfiddle 上的当前进度示例,谢谢
-
ideone.com/5sb68 由于 SQL-fiddle 只允许 8000 个或更少的字符,我在 ideone.com 上发布了插入。由于隐私原因,我删除了所有不需要的数据,并替换了产品名称。 (应将 16206 和 2 替换为该行的当前 ID)。
标签: mysql select parameters conditional-statements