[英]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.