741

3 つのテーブルの結合によって返される値でフィールドを更新する必要があります。

例:

select
    im.itemid
    ,im.sku as iSku
    ,gm.SKU as GSKU
    ,mm.ManufacturerId as ManuId
    ,mm.ManufacturerName
    ,im.mf_item_number
    ,mm.ManufacturerID
from 
    item_master im, group_master gm, Manufacturer_Master mm 
where
    im.mf_item_number like 'STA%'
    and im.sku=gm.sku
    and gm.ManufacturerID = mm.ManufacturerID
    and gm.manufacturerID=34

上記の条件で結合された他の値mf_item_numberでテーブルのフィールド値を更新したい。item_master

MS SQL Server でこれを行うにはどうすればよいですか?

4

13 に答える 13

1365
UPDATE im
SET mf_item_number = gm.SKU --etc
FROM item_master im
JOIN group_master gm
    ON im.sku = gm.sku 
JOIN Manufacturer_Master mm
    ON gm.ManufacturerID = mm.ManufacturerID
WHERE im.mf_item_number like 'STA%' AND
      gm.manufacturerID = 34

明確にするために...UPDATE句は、句で指定されたテーブルの別名を参照できますFROM。したがってim、この場合は有効です

一般的な例

UPDATE A
SET foo = B.bar
FROM TableA A
JOIN TableB B
    ON A.col1 = B.colx
WHERE ...
于 2009-06-11T18:55:52.570 に答える
80

これをMySQLに適応させる - にはFROM句はありませんUPDATEが、これは機能します:

UPDATE
    item_master im
    JOIN
    group_master gm ON im.sku=gm.sku 
    JOIN
    Manufacturer_Master mm ON gm.ManufacturerID=mm.ManufacturerID
SET
    im.mf_item_number = gm.SKU --etc
WHERE
    im.mf_item_number like 'STA%'
    AND
    gm.manufacturerID=34
于 2012-03-18T02:57:38.830 に答える
71

最も簡単な方法の 1 つは、共通のテーブル式を使用することです (既に SQL 2005 を使用しているため)。

with cte as (
select
    im.itemid
    ,im.sku as iSku
    ,gm.SKU as GSKU
    ,mm.ManufacturerId as ManuId
    ,mm.ManufacturerName
    ,im.mf_item_number
    ,mm.ManufacturerID
    , <your other field>
from 
    item_master im, group_master gm, Manufacturer_Master mm 
where
    im.mf_item_number like 'STA%'
    and im.sku=gm.sku
    and gm.ManufacturerID = mm.ManufacturerID
    and gm.manufacturerID=34)
update cte set mf_item_number = <your other field>

クエリ実行エンジンは、レコードの更新方法を独自に判断します。

于 2009-06-11T22:04:26.987 に答える
13

上記のSQLは使用しませんでしたが、結合ステートメントに基づいてテーブルを更新する例を次に示します.

UPDATE p
SET    p.category = c.category
FROM   products p
       INNER JOIN prodductcatagories pg
            ON  p.productid = pg.productid
       INNER JOIN categories c
            ON  pg.categoryid = c.cateogryid
WHERE  c.categories LIKE 'whole%'
于 2009-06-11T19:02:25.583 に答える
8

次のように、UPDATE ステートメントの "FROM " 句を使用して、更新する方法と対象を決定するために使用される追加のテーブルを指定できます。

update item_master
set mf_item_number = (some value)
from 
   group_master as gm
   join Manufacturar_Master as mm ON ........
where
 .... (your conditions here)

WHERE 句では、これらのテーブルを結合するための条件と結合操作を指定する必要があります。

マルク

于 2009-06-11T18:55:48.640 に答える
2

SQL Server を使用している場合、結合を指定せずに他のテーブルから 1 つのテーブルを更新し、where 句から 2 つのテーブルをリンクするだけです。これにより、はるかに単純な SQL クエリが作成されます。

 UPDATE Table1
    SET Table1.col1 = Table2.col1,
        Table1.col2 = Table2.col2
    FROM
        Table2
    WHERE
        Table1.id = Table2.id
于 2020-12-30T10:32:06.473 に答える