繁体   English   中英

将SQL中的一对多关系转换为一对一

[英]Convert one-to-many relationship to one-to-one in SQL

我有两个表,A 和 B 表 A: Id int Id_B int (FK with B)

表 B:标识

当前state:表A中的一个Id可以有多个Id_B关系,表A中的两个Id可以有相同的Id_B

新 state:我希望使表 A 中的两个 Id 不能具有相同的 Id_b。 如果我找到这样的关系,则在表 B 中创建一个新的 Id 并将其链接到表 A 中的 Id 以强制执行上述约束

我不知道在 SQL 中从哪里开始。

表 A

ID Id_B
1 1
1 4
2 1
3 2
4 3

表 B

ID
1
2
3
4

之后(由于在 Id_B 列中出现了两次 1,我在表 B 中创建了一个新行(id 为 5),并将此行的 Id 分配给表 A 中的 Id 2 以强制唯一性)

表 A

ID Id_B
1 1
1 4
2 5
3 2
4 3

表 B

ID
1
2
3
4
5
  1. 查找所有重复的 A.B_ID 行,为重复项添加新的 B 行并更新相应的 A.B_ID。

从如下查询开始:

with q as 
(
  select *, row_number() over (partition by B_ID, order by ID) rn
  from A
)
select * 
from q
where rn > 1
  1. 在 A.B_ID 上添加唯一约束

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM