2012-11-06 86 views
2

我有這樣的例子表:SQL查詢 - 兩個表關係多對一(標準化問題)

table ORDERS 

client orderno cant1 code1 notes1 cant2 code2 notes2 cant[i] code[i] [...] 
-------------------------------------------------------------------------------------- 
1   1  3  AA01 Test  4  BB01 Testing 
2   2  10  XX05 Test  



table PRODUCTS 

code prod price 
--------------------- 
AA01 Engine 100 
BB01 Wheel  50 



table CLIENTS 

client name  address  telephone 
----------------------------------------- 
    1  Maxwell 24 1st st 0987654321 
    2  Hammer 77 main st 1234567890 

我需要涉及他們得到的產品和價格的數量,名稱爲每個我發現這種情況,但我不明白如何申請(我不知道該怎麼申請),但是我不知道如何申請它對我的:SQL query two tables with relation one-to-many

我希望它不是太複雜。

在此先感謝!

編輯

感謝ElectricLlama我在這裏認識的問題出在哪裏順序蓄能表。根據他的回答,數據庫的規範化將改善我能夠獲取信息的方式。

任何有興趣在此解決方案,我發現這個偉大的網站:http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/

這SO答案清除這一切!超級清晰,可以理解! https://stackoverflow.com/a/1258776/888292

+1

我建議你重新閱讀課本。我打賭這是一項家庭作業。 – kirbs

+0

對不起,如果它看起來太簡單或直接。這是我的第一個直接使用SQL數據庫的作業之一。我甚至不知道要從哪裏開始或搜索什麼來獲得這方面的幫助。 – KUMO

+0

這是我的最佳嘗試:http://pastebin.com/0j2vnVEb但我敢打賭有一個更短,更有效的方式來做到這一點。我真的很喜歡你對此的反饋。 – KUMO

回答

2

看看你的鏈接是什麼 - 是的,它似乎很多廢話,但它可能是唯一的方法來得到你想要的。

問題是你的表沒有被標準化。具體來說,你不應該有字段叫code1 code2 code3 code4 ... code30

這個設計有很多缺陷,包括當客戶有31個產品時會發生什麼?

在標準化的數據庫中,您將擁有一個包含一組斜體,代碼和註釋的表格,並且每個產品都有一行。

但我想你不能規範化它。

爲了提出自己的答案,做得非常好,現在您還可以親身體驗數據庫不規範化的影響。

什麼可能想要考慮的是創建一個視圖,將您正常化這個。它會引入性能問題,但它會給你一個視圖介紹,並讓你有機會看到解決方案對於規範化表格的樣子。

+0

謝謝ElectricLlama。關於標準化表的提示非常有用。這實際上是一項正在進行的工作,所以我可能會修改表格的保存方式。我會研究的! **順便說一句:30種產品是訂單的限制。 ** // 另外,我感謝其他人試圖讓我學習MySQL,但我現在確實做到了。像E-LAMA的提示更有幫助。 – KUMO

+0

令人驚訝的是,表格被標準化時,查詢是多麼容易!我又重生了。謝謝! – KUMO

+0

優秀!我很高興你在開發過程中足夠早地做出改變,通常人們必須使用無法改變的系統。 –

0

我認爲你的表應該看起來像

表訂單

-------------

orderno
客戶
代碼
斜面
音符

這裏使orderno,客戶端和代碼作出的一個複合主鍵表

+0

謝謝Mitesh。這正是我所做的,而且非常完美! – KUMO