我使自己陷入了一个棘手的境地,发现自己无法凭借有限的数据库经验摆脱困境。我在我的办公室让其他三个开发人员来看看这个,我们没有人能够想出一种方法来完成我想做的事情,而无需求助于多个查询。我非常感谢您提供的任何帮助。
这是我的数据结构的简化视图:
[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] 项:
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 编号的唯一项目列表,它将在我的应用程序代码中节省大量工作。
我需要重新构建我的数据吗?