web-dev-qa-db-ja.com

SQLで複数の列を更新する

挿入ステートメントが使用されるのと同じ方法でSQLサーバーの複数の列を更新する方法はありますか?

何かのようなもの:

Update table1 set (a,b,c,d,e,f,g,h,i,j,k)=
(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k)
from table2 t2
where table1.id=table2.id

そうではなく、そのようなものです。

update table set a=t2.a,b=t2.b etc 

100個以上の列がある場合、これを書くのはかなり面倒です。

141
Joe

「面倒な方法」は標準SQLであり、RDBMSの主流である方法です。

100個以上の列を使用すると、設計上の問題が発生する可能性があります。また、クライアントツール(生成UPDATEステートメントなど)やORMを使用した方法で問題を軽減する方法もあります。

75
gbn

これを試して:

UPDATE table1 
SET a = t2.a, b = t2.b, .......
FROM table2 t2
WHERE table1.id = t2.id

Oracleを除くほとんどのSQL方言でこれが機能するはずです。

そうです - これは多くの入力です - SQLがこれを行う方法です。

179
marc_s

Update table1 set (a,b,c) = (select x,y,x)構文は行値コンストラクタの使用例です。 Oracleはこれをサポートしています 、MSSQLはサポートしていません。 ( 接続項目

20
Alex K.

あなたの質問はほぼ正しいです。これに対するT-SQLは次のとおりです。

UPDATE  Table1
SET     Field1 = Table2.Field1,
        Field2 = Table2.Field2,
        other columns...
FROM    Table2
WHERE   Table1.ID = Table2.ID
15
John Woo

構文

UPDATE table-name 
SET column-name = value, column-name = value, ...
WHERE condition


UPDATE school
SET course = 'mysqli', teacher = 'Tanzania', student = 'you'
WHERE id = 6
12
   UPDATE t1 
    SET 
    t1.a = t2.a,
    t1.b = t2.b,
    .
    .
    .


    FROM 
    table1 t1 
    INNER JOIN table2 t2 ON  t1.id=t2.id

あなたはこれを試すことができます

私はこの方法で試してみました、そしてそれはうまく働きます:

UPDATE 
  Sub2 
SET 
  SLNNOND = Sub.SLNNOND, 
  Sub2.SLNNONF = Sub.SLNNONF 
FROM 
  #TEMP Sub2
2
Peter

これはうまくいくものです:

UPDATE  `table_1`
INNER JOIN 
 `table_2` SET  col1= value, col2= val,col3= val,col4= val;

値はtable_2の列です

1
Dragos Custura

これを数回再入力する必要がある場合は、私が一度行ったように行うことができます。右側のExcelシートの列に列の名前を入れます(各列の名前の最後に書き留めます(メモ帳++では簡単です))、新しいエントリに対応する値をコピーして貼り付ける列を作成します各列それから、それらの右側の独立した列に、設計通りにコンマを入れます。

それからあなたはその都度中央のコラムにあなたの値をコピーしなければならないでしょうそれからちょうどその時ペーストしそして実行する

私はもっ​​と簡単な解決策を知りません

0
Mohamed Bekheit