[英]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 |
从如下查询开始:
with q as
(
select *, row_number() over (partition by B_ID, order by ID) rn
from A
)
select *
from q
where rn > 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.