0

SQLのまったくの初心者からこんにちは!

別のテーブルに基づいて入力したいフィールドがあります。このために、次のように失敗するクエリを作成しました: Msg 512, Level 16, State 1, Line 1 サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。ステートメントは終了されました。

わかりました、ここに行きます:

Update kre.CustomerOrderLineCopy 
SET    DepNo = (SELECT customerordercopy.DepNo 
                          FROM   kre.CustomerOrderCopy , kre.CustomerOrderLineCopy
                          WHERE  CustomerOrderLineCopy.OrderCopyNo =kre.CustomerOrderCopy.OrderCopyNo) 
WHERE CustomerOrderLineCopy.OrderCopyNo = (SELECT  CustomerOrderCopy.OrderCopyNo 
                             FROM   kre.CustomerOrderCopy, kre.CustomerOrderLineCopy
                             WHERE kre.CustomerOrderLineCopy.OrderCopyNo = kre.CustomerOrderCopy.OrderCopyNo)

私がやろうとしているのは、両方のテーブルの同じ OrderCopyNo に基づいて、CustomerOrderCopy の DepNo の値で CustomerOrderLineCopy の DepNo を変更することです。

私はすべての提案を受け入れています。

ありがとう、オハルバーズ

4

3 に答える 3

0

テーブルを結合するだけなら、更新は簡単です。

UPDATE A SET A.DepNo = B.DepNo
FROM kre.CustomerOrderLineCopy A
INNER JOIN kre.CustomerOrderCopy B ON A.OrderCopyNo = B.OrderCopyNo
于 2013-07-09T13:59:33.630 に答える
0

これはそれを静かにするのに十分かもしれません:

Update kre.CustomerOrderLineCopy 
SET    DepNo = (SELECT customerordercopy.DepNo 
                          FROM   kre.CustomerOrderCopy --, kre.CustomerOrderLineCopy
                          WHERE  CustomerOrderLineCopy.OrderCopyNo =kre.CustomerOrderCopy.OrderCopyNo) 
WHERE CustomerOrderLineCopy.OrderCopyNo = (SELECT  CustomerOrderCopy.OrderCopyNo 
                             FROM   kre.CustomerOrderCopy --, kre.CustomerOrderLineCopy
                             WHERE kre.CustomerOrderLineCopy.OrderCopyNo = kre.CustomerOrderCopy.OrderCopyNo)

(サブクエリでコメントアウトした場所kre.CustomerOrderLineCopy)つまり、これらのサブクエリを外部テーブルと関連付けようとしていたことを願っkre.CustomerOrderLineCopyています - の別のインスタンスを導入しないでください。

それでもエラーが発生する場合kre.CustomerOrderCopyは、同じOrderCopyNo. その場合は、使用する行を選択する方法に適用するルールを私たち (および SQL Server) に提供する必要があります。

FROM ... JOIN@Avitusの回答に示されているフォームに切り替える危険性は、一致する行が複数ある場合に報告されなくなることです-それらの1つを静かに選択するだけです-どれが明確にされません。


クエリをもう一度見てみると、WHERE句が必要かどうかさえわかりません。これは同じだと思います:

Update kre.CustomerOrderLineCopy 
SET    DepNo = (
   SELECT customerordercopy.DepNo 
   FROM   kre.CustomerOrderCopy
   WHERE  CustomerOrderLineCopy.OrderCopyNo = kre.CustomerOrderCopy.OrderCopyNo) 
于 2013-07-09T14:14:17.197 に答える
0

問題は、サブクエリの少なくとも 1 つが複数の値を返すことです。これについて考えます:

tablePerson(名前、年齢)

アダム、11歳

エヴァ、11歳

スヴェン 22

    update tablePerson
    set name = (select name from tablePerson where age = 11)
    where name = 'Sven'

これは次と同じです: Sven の名前を AdamEva に設定します。これは不可能です。

サブクエリを使用する場合は、サブクエリが 1 つの値のみを返すようにするか、次を使用して 1 つの値を強制します。

select top 1 xxx from ...
于 2013-07-09T14:09:01.513 に答える