SQL查询 - 两个表关系多对一(标准化问题)

问题描述:

我有这样的例子表: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

看看你的链接是什么 - 是的,它似乎很多废话,但它可能是唯一的方法来得到你想要的。

问题是你的表没有被标准化。具体来说,你不应该有字段叫code1 code2 code3 code4 ... code30

这个设计有很多缺陷,包括当客户有31个产品时会发生什么?

在标准化的数据库中,您将拥有一个包含一组斜体,代码和注释的表格,并且每个产品都有一行。

但我想你不能规范化它。

为了提出自己的答案,做得非常好,现在您还可以亲身体验数据库不规范化的影响。

什么可能想要考虑的是创建一个视图,将您正常化这个。它会引入性能问题,但它会给你一个视图介绍,并让你有机会看到解决方案对于规范化表格的样子。

+0

谢谢ElectricLlama。关于标准化表的提示非常有用。这实际上是一项正在进行的工作,所以我可能会修改表格的保存方式。我会研究的! **顺便说一句:30种产品是订单的限制。 ** // 另外,我感谢其他人试图让我学习MySQL,但我现在确实做到了。像E-LAMA的提示更有帮助。 – KUMO

+0

令人惊讶的是,表格被标准化时,查询是多么容易!我又重生了。谢谢! – KUMO

+0

优秀!我很高兴你在开发过程中足够早地做出改变,通常人们必须使用无法改变的系统。 –

同上@ElectricLlama &这里有一些链接,可以帮助你学习SQL:

我认为你的表应该看起来像

表订单

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

orderno
客户
代码
斜面
音符

这里使orderno,客户端和代码作出的一个复合主键表

+0

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