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
看看你的链接是什么 - 是的,它似乎很多废话,但它可能是唯一的方法来得到你想要的。
问题是你的表没有被标准化。具体来说,你不应该有字段叫code1 code2 code3 code4 ... code30
这个设计有很多缺陷,包括当客户有31个产品时会发生什么?
在标准化的数据库中,您将拥有一个包含一组斜体,代码和注释的表格,并且每个产品都有一行。
但我想你不能规范化它。
为了提出自己的答案,做得非常好,现在您还可以亲身体验数据库不规范化的影响。
什么可能想要考虑的是创建一个视图,将您正常化这个。它会引入性能问题,但它会给你一个视图介绍,并让你有机会看到解决方案对于规范化表格的样子。
同上@ElectricLlama &这里有一些链接,可以帮助你学习SQL:
我认为你的表应该看起来像
表订单
-------------
orderno
客户
代码
斜面
音符
这里使orderno,客户端和代码作出的一个复合主键表
谢谢Mitesh。这正是我所做的,而且非常完美! – KUMO
我建议你重新阅读课本。我打赌这是一项家庭作业。 – kirbs
对不起,如果它看起来太简单或直接。这是我的第一个直接使用SQL数据库的作业之一。我甚至不知道要从哪里开始或搜索什么来获得这方面的帮助。 – KUMO
这是我的最佳尝试:http://pastebin.com/0j2vnVEb但我敢打赌有一个更短,更有效的方式来做到这一点。我真的很喜欢你对此的反馈。 – KUMO