表格
Customer
:ID
(PK),各种字段。
CustomerDeleted
:几乎是Customer
表的精确副本。客户确实经常在Customer
表中出现重复(添加新客户的过程仅使用名称和位置等常见字段进行检查,因此,如果添加的用户拼写错误,则Customer
表中会有同一客户的两条记录),一旦发现重复,最后添加的条目将从CCD_ 7表中删除,并插入到CCD_
Beneficiary
:ID(PK),各种字段。
CustomerBeneficiary
:CustomerID
、BeneficiaryID
(PK二者)。Customer
和Beneficiary
表之间的链接表。每个客户都可以有一定数量的受益人。
我想做什么
将CustomerBeneficiary
表中的CustomerID
和BeneficiaryID
设置为它们各自表的FK。
问题
CustomerBeneficiary
中可能有受益人链接到当前Customer
和CustomerDeleted
的记录,因此,如果您只是尝试添加指向Customer
表的FK,则会出现以下错误
ALTER TABLE语句与FOREIGN KEY约束冲突
如何
我需要更新CustomerBeneficiary
表,以便所有包含CustomerDeleted
客户ID的记录都指向有效/当前客户ID。删除的客户ID可能链接到与当前客户ID相同的受益人ID,因此无法执行UPDATE
语句,因为CustomerBeneficiary
表中会有重复的PK。
我认为必须有一个INSERT
(添加新行,以便当前客户向其重复帐户链接到的任何受益人指出),然后是DELETE
(清除CustomerBeneficiary
表中CustomerID
属于已删除客户的所有行)。
现在,虽然我知道需要做什么,但我的SQL知识非常有限,我完全不知道如何进行这种复杂的查询。我希望我已经很好地解释了情况,有人能伸出援手。
添加关系,其中删除的客户有关系,而当前客户没有
INSERT INTO CustomerBeneficiary
SELECT DISTINCT cd.currentCustomer, cb.BeneficiaryID
FROM CustomerBeneficiary cb
INNER JOIN CustomerDeleted cd
ON cb.CustomerID = cd.CustomerID
WHERE cb.CustomerID in (SELECT CustomerID
FROM CustomerDeleted
WHERE currentCustomerID is not null)
AND
cd.currentCustomerID not in (SELECT CustomerID
FROM CustomerBeneficiary
WHERE CustomerID = cd.currentCustomerID
AND BeneficiaryID = cb.BeneficiaryID )
删除与不在客户表中的客户的所有关系
DELETE
FROM CustomerBeneficiary
WHERE CustomerID not in (SELECT CustomerID FROM Customers)
现在您可以添加您的外键