我正在清理我的数据库结构:我有几个表
A
,B
和C
,其中包含所有相同的列date1
,date2
和date3
。
我想创建一个包含这 3 列的新表 date
并将其用作 A
、B
和 C
中的外键。
创建表格很容易,但我不知道如何最初填充表格
date
,这样我就不会丢失关于date1
、date2
和date3
的已有信息。
假设
A
、B
和C
的每一行都必须链接到date
中的一行,有没有办法在sql中做到这一点?
输入示例:
表A:
id, date1, date2, date3, x, y
1, 01/01/2023, 05/05/2023, 01/01/2023, 1, 2
2, 01/01/2023, 05/05/2023, 01/01/2023, 1, 2
3, 22/05/2023, 11/05/2023, 19/12/2023, 1, 2
表B:
id, date1, date2, date3, x
1, 01/01/2020, 05/05/2020, 01/01/2020, 1
表C:
id, date1, date2, date3
1, 01/01/2020, 05/05/2020, 01/01/2020, 1
预期输出:
表
date
(请注意,预计行相同):
id, date1, date2, date3
1, 01/01/2023, 05/05/2023, 01/01/2023
2, 01/01/2023, 05/05/2023, 01/01/2023
3, 22/05/2023, 11/05/2023, 19/12/2023
4, 01/01/2020, 05/05/2020, 01/01/2020
5, 01/01/2020, 05/05/2020, 01/01/2020
表A:
id, x, y, date_id
1, 1, 2, 1
2, 1, 2, 2
3, 1, 2, 3
表B:
id, x, date_id
1, 1, 4
表C:
id, date_id
1, 5
我们经常面临这样的场景:我们必须将表中的重复文本映射到 id(使用定义表)。我通常分两步完成。
在你的场景中,它会是这样的:
PS:如果我有一个大表,那么我会通过应用适当的 where 过滤器来分块进行。