簡體   English   中英

將外鍵添加到包含無效FK值(MYSQL)的現有表中

[英]Add a Foreign Key to an Existing Table that Contains what would be Invalid FK Values (MYSQL)

我需要向已存在的表中添加外鍵,並在該表中填充包含無效外鍵值的數據。 (MYSQL)
我知道沿着這些思路有幾個問題,但是我似乎找不到任何能回答我的情況的問題。


表和數據結構
“ GblTable”包含一個“ Org”字段,該字段需要成為Org表的FK。 組織表中有一個稱為“數字”的PK字段。

當前,GblTable包含不存在的組織編號(即,如果組織表中包含PK為1,2和3的行,則GblTable可能包含組織為4或5的行)。 在這種情況下,我無法將約束應用於引用GblTable.org到Org.number。

我相信針對這種特定情況的最佳方法將是在應用約束之前將這些行中的FK字段設置為NULL。 NULL是程序的有效GblTable.Org值,因此將獲得可接受的結果。


我到目前為止所擁有的
我想將所有GblTable.Org值都設置為NULL,其中它們與有效的Org.Number不匹配。

用偽代碼:

set GblTable.ORG to NULL 
    where the GblTable.number is one of the following:
    (  select all GblTable.numbers where the GblTable.Org does not match an existing Org.Number )


在Sql中,但出現錯誤“您無法在FROM子句中指定目標表'GblTable'進行更新”:

update GblTable set Org=NULL
    where number IN (
        select number
        from   GblTable
        where  Org NOT IN (select number from Org)
        )


達到我的要求的最佳方法是什么?

您不需要額外的子查詢級別:

update GblTable set Org=NULL
    where  Org NOT IN (select number from Org)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM