我有产品。每个产品都由项目和组件组成。程序集本身也可以由项目组成。所以这是一个层次结构,但深度有限。我想做的是列出产品及其包含的项目和组件,以及产品组件中的任何项目。
这是我想看到的输出。它不必看起来完全像这样,但目的是显示产品中的项目,然后是组件,然后在每个组件中显示其中的项目。列数不是固定的,如果需要更多来显示程序集中的项目,那没有问题。
ProductID ProductName AssemblyID AssemblyName ItemID ItemName
--------- ----------- ---------- ------------ ------ --------
P0001001 Product One
I0045 Item A
I0082 Item B
A00023 Assembly 1
I0320 Item 1
I0900 Item 2
A00024 Assembly 2
I0877 Item 3
I0900 Item 2
I0042 Item 4
然后,我可以使用它来构建按产品 ID 分组的报告,以列出每个产品的内容。
这是我目前的表结构。
+ProductList-+ +ProductItems-+
|ProductID | ----------> |ProductID | +ItemList-+
|ProductName | \ |ItemID | --------------------------------> |ItemID |
|Price | \ +-------------+ > |ItemName |
+------------+ \ / |Cost |
\ +ProductAssemblies-+ / +---------+
\-> |ProductID | +AssemblyItems-+ /
+-- |AssemblyID | ----> |AssemblyID | /
| |BuildTime | |ItemID | ---/
| +------------------+ +--------------+
|
| +AssemblyList-+
+-> |AssemblyID |
|AssemblyName |
+-------------+
我需要什么样的 SELECT 语句才能做到这一点。
我想我需要某种外连接,但我并不完全了解 SQL 语法来了解如何构造 select 语句。我所有的努力总是导致产品在每个项目和组件中被多次列出。因此,如果一个产品有 3 个项目和 2 个组件,则该产品出现 6 次。
搜索这类问题并不容易,因为我不知道我需要搜索什么。是三表问题,外连接问题,还是只是一个简单的句法答案。
还是在不使用程序集的情况下切换到纯层次表结构会更好?然后在分层表上搜索以解决我可能遇到的任何问题会更容易。
我正在使用 LibreOffice 3.5.6.2 Base。它有向导和其他有用的东西,但它们并没有扩展到我发现自己所处的复杂情况。目的是数据库包含价格,它可以用来从物品成本中适当地定价产品以及构建组件的时间。
温柔点,我是SO的新手。