0

かなり複雑なクエリを実行しようとしています。2つのテーブルが同期していません。処理の1つのステップで、16桁の値が一方のテーブルからもう一方のテーブルにコピーされ、わずか10桁に切り捨てられます。

いくつかの情報を使用して、16桁の数字全体をコピーしています。10桁の値が16桁の値の最初の10桁と一致し、これら2つのテーブルの他の3つの情報が一致する場所を見つけようとしています。組み合わせると、それらは私たちがユニークなエントリーを持っているというほぼ100%の確実性を与えます。これは私のクエリの現在の反復です:

UPDATE DB1.TABLE1
SET ID =
(
SELECT b.ID
FROM DB2.TABLE1 b
INNER DB1.TABLE1 a 
ON left(b.ID, 10) = a.ID
WHERE len(a.ID) = 10
AND a.STORE = b.STORE
AND a.DOCTYPE = b.DOCTYPE
AND a.DOCDATE = b.DOCDATE
)

問題は、サブクエリが複数の結果を返していることを示していることです。しかし、私は複数の結果が欲しいです。括弧の後に別のステートメントを追加しWHERE、サブクエリの最後の4行を複製しようとしましたが、それも機能していません。また、ステートメント全体を使用WHERE EXISTSして複製しようとしSELECTましたが、複数の結果のエラーも発生します。ここで何が欠けていますか?

4

1 に答える 1

1

ステートメントは、DB1.TABLE1のすべての行をサブクエリによって返されるものに更新しようとしています。それはあなたが望むものではないだけでなく、サブクエリが複数の値を返すため、ステートメントは失敗します。

あなたがする必要があるのは、次のように、updateステートメントの一部として2つのテーブルを相互に関連付けることです。

UPDATE DB1.TABLE1
SET ID = b.ID
FROM DB1.TABLE1 a
  INNER JOIN DB2.TABLE1 b
  ON left(b.ID, 10) = a.ID
    AND a.STORE = b.STORE
    AND a.DOCTYPE = b.DOCTYPE
    AND a.DOCDATE = b.DOCDATE
WHERE len(a.ID) = 10
于 2012-04-09T18:24:55.303 に答える