从多个表中删除和复制数据时出现问题

时间:2018-09-01 20:20:11

标签: sql sql-server

我正在处理一个案件,这对我来说很困难。 我正在准备一个将在大型数据库上执行的脚本。

关于问题

假设我们有一个主表A

Id | Type | StartTime | EndTime
1     0        1          2          valid
2     1        2          3          valid
3     0        3          6          invalid
4     1        7          8          valid
5     0        9          10         invalid
6     0        14         20         invalid

并连接第二个表B(B [refId]-> A [id])

Id  | RefId |  StartTime | EndTime
1       1         1          1
2       1         2          2
3       2         2          3
4       3         3          5
5       3         5          6
6       4         6          8
7       5         9          10
8       6         14         15
9       6         15         16
10      6         17         18
11      6         18         18
12      6         19         20

现在我们有了表A中有效行的定义。 类型为“ 1”的行有效。而且,总是第一行也是有效的。  其余无效,应将其删除。

该怎么办:

  1. 从表A中删除所有无效行
  2. 对于无效行->将表B中的所有相关数据复制到上一个有效行(例如,将ID为5和6的refId更新为refId 4)
  3. 对于有效行->从表A中已删除的无效行更新EndTime(例如,将Endtime从ID为6的行复制到ID为4的行)

预期结果

表A

  Id | Type | StartTime | EndTime
    1     0        1          2                    valid
    2     1        2          6 ( from 3)          valid
    4     1        7          20 (from 8)          valid

表B(B [refId]-> A [id])

Id  | RefId |  StartTime | EndTime
1       1         1          1
2       1         2          2
3       2         2          3
4       2(from3)  3          5
5       2(from3)  5          6
6       4         6          8
7       4(from5)  9          10
8       4(from6)  14         15
9       4(from6)  15         16
10      4(from6)  17         18
11      4(from6)  18         18
12      6(from6)  19         20

当前,我的决议

  • 为每个有效行( 1 )查找下一个有效行( 2 )(加入)
  • 在两个有效行之间查找最后一个无效行(联接)
  • 将endTime从最后一个无效行复制到有效行( 1

但是使用这种解决方案,我在这个有效行之间只有一个无效行,而且我将所有数据从表B移到有效行(表A id 4、5、6)时遇到问题。

有没有解决这个问题的方法?

0 个答案:

没有答案