如何用现有数据填充新的外键表?

问题描述 投票:0回答:1

我正在清理我的数据库结构:我有几个表

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
sql mysql foreign-keys
1个回答
0
投票

我们经常面临这样的场景:我们必须将表中的重复文本映射到 id(使用定义表)。我通常分两步完成。

  1. 获取不同的值并插入到新创建的 def 表中。
  2. 然后使用重复文本列将目标表与 def 表连接起来,以更新目标表中的 id。

在你的场景中,它会是这样的:

  1. 使用 union 从所有目标表中获取不同的 date1、date2、date3 来填充 def 表
  2. 然后通过在列 date1、date2、date3 上将目标表与 def 表连接来编写更新查询

PS:如果我有一个大表,那么我会通过应用适当的 where 过滤器来分块进行。

© www.soinside.com 2019 - 2024. All rights reserved.