我需要一些SQL查询的帮助.我知道这应该重新设计,但这是我在一个更大的系统上做的一个小修复:(.
该系统有一个名为sales的表,包含已售出的零件.
id | date | idpart
1 |unixtime| 227
2 |unixtime| 256
Run Code Online (Sandbox Code Playgroud)
等等..
在包含订单内容的Orderdetails表中,零件按ID列出,并且客户订购了唯一零件的金额.
id |idpart | amount
1 | 255 | 4
2 | 265 | 2
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是我必须运行一个Query来填充sales表,但是将idpart作为新行添加的次数与该部件具有的值相同.我需要结果:
id | date | idpart
1 |unixtime| 227
2 |unixtime| 256
3 |unixtime| 255
4 |unixtime| 255
5 |unixtime| 255
6 |unixtime| 255
7 |unixtime| 265
8 |unixtime| 265
Run Code Online (Sandbox Code Playgroud)
有没有人可以帮我解决这个问题?
如果您有一张包含数字的表格,这很容易。你可以这样做:
select id, date, idpart
from sales
union all
select id, date, idpart
from orders o cross
numbers n
on n.number <= o.amount
Run Code Online (Sandbox Code Playgroud)
这是假设date来自订单表。
现在,您只需生成数字表即可。这是 MySQL 的一个痛点。也许您还有另一个可以使用的表,例如日历表。否则,您可以通过插入具有自动增量列的表来创建一个。
在其他数据库中,您可以使用该row_number()函数动态创建这样的表。但MySQL不支持这个。