我有產品。每件產品都由物品和裝配組成。組件本身也可以由項目組成。所以它是一個層次結構,但深度有限。我想要做的是列出產品及其包含的產品和配件,以及產品配件中的所有產品。具有多個表和可能的外連接的半分層SQL查詢
這是我希望看到的輸出。它不必看起來像這樣,但目標是顯示產品中的物品,然後是裝配,並在每個裝配中顯示其中的物品。列數不固定,如果需要顯示組件中的項目更多信息,則不會有問題。
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。
歡迎來到這裏:)你的問題很好,雖然它通常是一個很好的實踐,告訴我們你已經嘗試過;)我建議你看看我們的FAQ:http://stackoverflow.com/faq 。 :) – ForceMagic
我試過像下面的選擇「tblProductList」。「ProductID」,「tblProductItems」的東西。「ItemID」「tblProductAssemblies」「AssemblyID」FROM「tblProductList」LEFT JOIN「tblProductItems」ON(「tblProductList」。「ProductID」=「tblProductItems」。「ProductID」)LEFT JOIN「tblProductAssemblies」ON(「tblProductList」。「 ProductID「=」tblProductAssemblies「。」ProductID「),但我只是得到每個產品重複項目*程序集時間(例如3個程序集x 5個項目意味着我得到一個產品重複15次)。我嘗試了左右。正如我所說,除了使用單個表格之外,我不知道連接語法足以做任何事情。 –
您可以編輯自己的帖子來添加此信息,只需點擊「編輯」鏈接;) – ForceMagic