我的序列中有丢失的记录,而我当前的输出看起来像这样
| 1882 | 25548860 | 4 | 30 | null | null |
| 1882 | 25548861 | 4 | 30 | null | null |
| 1882 | 25548882 | 4 | 30 | null | null |
| 1882 | 25548883 | 4 | 30 | null | null |
| 1882 | 25548884 | 4 | 30 | null | null |
| 1882 | 25548885 | 4 | 30 | null | null |
missing records in between until 2122
| 2122 | 25548860 | 4 | 30 | null | null |
| 2122 | 25548861 | 4 | 30 | null | null |
| 2122 | 25548882 | 4 | 30 | null | null |
| 2122 | 25548883 | 4 | 30 | null | null |
| 2122 | 25548884 | 4 | 30 | null | null |
| 2122 | 25548885 | 4 | 30 | null | null |
我希望我的输出采用以下格式。给我建议一个SQL查询,该查询将在1883年到2121年之间更新monetdb中的记录。
| 1882 | 25548860 | 4 | 30 | null | null |
| 1882 | 25548861 | 4 | 30 | null | null |
| 1882 | 25548882 | 4 | 30 | null | null |
| 1882 | 25548883 | 4 | 30 | null | null |
| 1882 | 25548884 | 4 | 30 | null | null |
| 1882 | 25548885 | 4 | 30 | null | null |
| 1883 | 25548860 | 4 | 30 | null | null |
| 1883 | 25548861 | 4 | 30 | null | null |
| 1883 | 25548882 | 4 | 30 | null | null |
| 1883 | 25548883 | 4 | 30 | null | null |
| 1883 | 25548884 | 4 | 30 | null | null |
| 1883 | 25548885 | 4 | 30 | null | null |
........ ..........
........ ..........
| 2122 | 25548860 | 4 | 30 | null | null |
| 2122 | 25548861 | 4 | 30 | null | null |
| 2122 | 25548882 | 4 | 30 | null | null |
| 2122 | 25548883 | 4 | 30 | null | null |
| 2122 | 25548884 | 4 | 30 | null | null |
| 2122 | 25548885 | 4 | 30 | null | null |
答案 0 :(得分:0)
如果您事先知道丢失的id
的范围,则可以使用generate_series()
。假设您的表名为mytable
并且具有列(id, col1, col2, col3, col4, col5)
,则您可以复制具有id
1882的记录以用以下查询填充空白:
insert into mytable (id, co11, col2, col3, col4, col5)
select value, col1, col2, col3, col4, col5
from sys.generate_series(1883, 2121, 1)
cross join mytable t
where t.id = 1882
答案 1 :(得分:0)
假设表的架构类似于:
create table mytable(id int, col1 int, col2 int, col3 int, col4 int, col5 int);
您可以使用以下命令填写“缺少的记录”:
insert into mytable
select *, 4, 30, null, null
from sys.generate_series(1884, 2121, 1),
(select distinct col1 from mytable where id = 1883) as tmp;
但是,新记录将追加到现有记录中,因此,如果您希望按照上面显示的顺序退回它们,则需要通过以下方式附加订单:
select * from mytable order by id, col1;