リレーションを持つ2つのテーブルがあり、テーブルAのフィールドを更新します。同じクエリで更新と結合を組み合わせることはできますか?私はそれをグーグルで検索しましたが、実用的なソリューションは見つかりませんでしたか?
UPDATE md SET md.status = '3'
FROM pd_mounting_details AS md
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id
MS SQLを使用しています
Update t
SET
t.Column1=100
FROM
myTableA t
LEFT JOIN
myTableB t2
ON
t2.ID=t.ID
myTableA
をテーブル名に置き換え、Column1
を列名に置き換えます。
この後、単にtableBにLEFT JOINします。この場合のt
は、単にmyTableA
のエイリアスです。 t2
は結合テーブルのエイリアスです。私の例ではmyTableB
です。 t
またはt2
を使用するのが好きでない場合は、好きなエイリアス名を使用してください-それは問題ではありません-私はたまたまそれらを使用するのが好きです。
必要なものがSELECTステートメントからの更新である場合、次のようなことができます。
UPDATE suppliers
SET city = (SELECT customers.city FROM customers
WHERE customers.customer_name = suppliers.supplier_name)
表1の列の値が表2の列に挿入されるもう1つの例:
UPDATE Address
SET Phone1 = sp.Phone
FROM Address ad LEFT JOIN Speaker sp
ON sp.AddressID = ad.ID
WHERE sp.Phone <> ''
このクエリの左結合は無意味です。
UPDATE md SET md.status = '3'
FROM pd_mounting_details AS md
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id
pd_mounting_details
に一致する行が存在するかどうかにかかわらず、pd_order_ecolid
のすべての行を更新します。一致する行のみを更新する場合は、内部結合にする必要があります。
結合の有無に基づいて何らかの条件を適用する場合は、WHERE
句にCASE
句やSET
式を追加する必要があります。
Mysqlでは、SET
句を指定する必要がありますafter the JOIN
。例:
UPDATE e
LEFT JOIN a ON a.id = e.aid
SET e.id = 2
WHERE
e.type = 'user' AND
a.country = 'US';