【发布时间】:2012-04-05 20:14:35
【问题描述】:
我让自己陷入了一个棘手的境地,并且发现自己在数据库经验有限的情况下无法摆脱困境。我办公室的其他三位开发人员对此进行了研究,但我们中没有人能够在不诉诸多个查询的情况下想出一种方法来完成我想做的事情。非常感谢您提供的任何帮助。
这是我的数据结构的简化视图:
[REPORTS]
store_number
item
actual_inventory
[STORES]
store_number
store_attribute1
store_attribute2
store_attribute3
[PLANS]
store_attribute1
store_attribute2
store_attribute3
item
target_inventory
给定一个 store_number,我需要能够返回所有项目,actual_inventory 和 target_inventory。
难度:[REPORTS] 中的某些项目不在 [PLANS] 中,反之亦然。
这将返回商店的所有 [REPORTS] 项:
SELECT *
FROM `REPORTS`
WHERE
`store_number` = <<SOME NUMBER>>
这将返回商店的所有 [PLANS] 商品:
SELECT *
FROM `PLANS`
WHERE
`store_attribute1` = (SELECT `store_attribute1` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
and `store_attribute2` = (SELECT `store_attribute2` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
and `store_attribute3` = (SELECT `store_attribute3` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
我只是不知道如何组合它们!如果我执行 UNION,我似乎无法单独返回 _inventory 数字(在它们自己的列中)。
我尝试通过执行两个 LEFT JOIN 和一个 UNION 来模拟 FULL JOIN。这会返回我无法理解的结果。
我什至尝试对前两个查询中的每一个都使用 VIEWS 并从 VIEW 中选择以通过 STORE 提取数据。
我显然错过了一些东西。
如果我可以返回具有关联的 target_inventory 和 actual_inventory 编号的唯一项目列表,它将在我的应用程序代码中节省大量工作。
我需要重新构造我的数据吗?
【问题讨论】: