将一对多关系转换为MySQL

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

我有两个MySQL表,我们可以调用FooBar

两个表都有一个称为PrizeGroupId的列。目标是在这些列之间创建一对一的关系,并且我创建了存储过程来添加/编辑Foo,该存储过程通过Bar中的一对一关系来更新相应的行。

问题在于,数据并非总是以这种方式构造的,我需要编写脚本以将数据从其先前状态(我将要描述)转换为一对一关系基于PrizeGroupId

[以前,Foo中的多行可能具有相同的PrizeGroupId,因此基于BarFooPrizeGroupId中的条目之间存在一对多的关系。我需要编写的脚本必须将这种性质的每个一对多实例分解为FooBar之间的许多(几乎相同)一对一的关系。

原则上,我想:

  1. 迭代到Foo
  2. 查看当前行的PrizeGroupIdFoo中是否唯一。
  3. 为其分配唯一值(可能是当前项目的主键)
  4. 用新的BarPrizeGroupId中添加一行。将所有旧行的其他数据复制到此新行中,以使其“几乎相同”。
  5. 说完一切之后,从Bar中删除旧的一对多行。
  6. 我了解问题,以及如何以编程语言的伪代码实现此目的,但是我仍在学习MySQL,并且不确定如何解决此类问题。

如果您可以通过MySQL代码为我提供帮助,和/或为解决该问题可以采取/了解采取哪些步骤,或者至少使我指出与此类相关的阅读/ SO问题,尽管我自己很难找到特定的资源,但还是可以解决这个问题。

我有两个MySQL表,我们可以将其称为Foo和Bar。这两个表都有一个称为PrizeGroupId的列。目标是在这些列之间创建一对一关系,并且我已经创建了存储的...

mysql one-to-many one-to-one
2个回答
1
投票

您要的并不难。您的某些想法正在妨碍您。首先,几乎没有人会在SQL中进行迭代。 SQL不是那种语言。 SQL中的所有操作都是通过一组操作完成的。


0
投票

[Bar表必须对Foo中的每个记录包含一个记录,而Foo中的PrizeGroupId字段必须是不合法的。由于Foo.Id已经是唯一的,因此将其用作外键很有意义。

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