1

既に存在し、無効な外部キー値を含むデータが入力されているテーブルに外部キーを追加する必要があります。(MYSQL)
これらの線に沿っていくつかの質問があることは知っていますが、私のシナリオに答えるものを見つけることができないようです.


テーブルとデータ構造
「GblTable」には、Org テーブルの FK になる必要がある「Org」フィールドが含まれています。Org テーブルには、「number」という PK フィールドがあります。

現在、GblTable には存在しない Org 番号が含まれています (つまり、Org テーブルに PK 1、2、および 3 の行がある場合、GblTable には Org が 4 または 5 の行がある可能性があります)。これは事実ですが、GblTable.org を Org.number に参照する制約を適用することはできません。

この特定の状況に対する最善のアプローチは、制約を適用する前に、これらの行の FK フィールドを NULL に設定することだと思います。NULL はプログラムの有効な GblTable.Org 値であるため、これで許容できる結果が得られます。


これ
までのところ、有効な Org.Number と一致しないすべての GblTable.Org 値を NULL に設定したいと考えています。

擬似コード:

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)
        )


私の要件を達成するための最良の方法は何ですか?

4

1 に答える 1

2

サブクエリの余分なレベルは必要ありません。

update GblTable set Org=NULL
    where  Org NOT IN (select number from Org)
于 2013-08-20T01:55:29.403 に答える