10

where句の3つの異なる条件に基づいて、テーブルの3つの異なる列を更新しようとしています。(更新されたデータは別のテーブルにあるので、主キーで結合しています)

たとえば、以前は顧客のfield1に値がなかったが、現在は値がある場合、列「field1」を更新できるはずです。同様に、フィールド2とフィールド3の列を更新したいと思います。

これを単一のUpdateステートメントで実行できますか?

1つの列を更新するには、次のように記述できます。

Update tblCustomer 
SET tblCustomer.Order_Date = tblCustomerInfo.Order_Date
FROM tblCustomer 
LEFT JOIN tblCustomerInfo ON (tblCustomer.CustomerID = tblCustomerInfo.CustomerID)
WHERE tblCustomer.Order_Date <> tblCustomerInfo.Order_Date 
  AND tblCustomer.Order_Date is NULL;

さまざまなwhere条件に基づいて3つの異なる列を一度に更新するのはどうですか(その列のデータが以前に欠落していて、現在利用可能である場合)

4

2 に答える 2

20
UPDATE categories
    SET display_order = CASE id
        WHEN 1 THEN 3
        WHEN 2 THEN 4
        WHEN 3 THEN 5
    END,
    title = CASE id
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)
于 2012-10-03T05:17:09.603 に答える
2

複数の列を更新できます

 UPDATE [t1]
  SET field1 = t2.field1,
      field2 = CASE WHEN <field 2 changed> THEN t2.field2 ELSE t1.field2 END,
      field3 = CASE WHEN t1.field3 <> t2.field3 THEN t2.field3 else t1.field3 END
  FROM <table1> as t1
  LEFT JOIN <table2> as t2 on t1.key1 = t2.key1
于 2012-09-10T21:23:31.023 に答える