簡體   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