Customers and Salespeoepleに関連付けられた行を返すクエリを作成しました。
クエリは複数のデータベーステーブルを結合することに注意してください。また、すべての顧客に営業担当者がいるわけではないことに注意してください。
c_id c_name s_id s_name
24 Microsoft 1 mike
27 Sun 1 mike
42 Apple 2 bill
44 Oracle 1 mike
47 sgi 1 mike
58 ebay 2 bill
61 Paypal 3 joe
65 redhat 1 mike
また、データベースには次のような単一のテーブル(invoicesと呼ばれます)があります。
i_id c_id c_name s_id s_name
7208 22 toyota NULL NULL
7209 23 ford NULL NULL
7210 27 Sun NULL NULL
7211 42 Apple NULL NULL
7212 12 nissan NULL NULL
7213 15 gm NULL NULL
7214 61 Paypal NULL NULL
MySQLでUPDATEを使用して、請求書テーブルを次のテーブルのようにするにはどうすればよいですか?
i_id c_id c_name s_id s_name
7208 22 toyota NULL NULL
7209 23 ford NULL NULL
7210 27 Sun 1 mike
7211 42 Apple 2 bill
7212 12 nissan NULL NULL
7213 15 gm NULL NULL
7214 61 Paypal 3 joe
つまり、請求書テーブルを更新して、その関係が存在する正しいsalesperson_idとsalesperson_nameを含めるにはどうすればよいですか?
顧客/営業担当者の関係が存在する場合、その顧客の営業担当者がいる場合は、その顧客のすべての請求書に営業担当者を関連付ける必要があることに注意してください。
親切にありがとう:-)
最も広くサポートされているオプション
UPDATE INVOICES
SET s_id = (SELECT cs.s_id
FROM CUSTOMERS_AND_SALES cs
WHERE cs.c_id = INVOICES.c_id),
s_name = (SELECT cs.s_name
FROM CUSTOMERS_AND_SALES cs
WHERE cs.c_id = INVOICES.c_id)
WHERE INVOICES.c_id IN (SELECT cs.s_id
FROM CUSTOMERS_AND_SALES cs)
UPDATE INVOICES
JOIN CUSTOMERS_AND_SALES cs ON cs.c_id = INVOICES.c_id
SET s_id = cs.s_id,
s_name = cs.s_name
最初のテーブルの名前がcustomers
で、営業担当者がいない顧客にはs_id
of NULL
UPDATE invoices JOIN customers USING (c_id)
SET invoices.s_id = customers.s_id, invoices.s_name = customers.s_name
WHERE customers.s_id IS NOT NULL;
開発でテストするか、最初に上記のSELECT
を使用してJOIN
クエリを実行し、結果を確認することをお勧めします。
ビューを作成して、UPDATE
ステートメントを単純にすることができます。ビューにはクエリ(この場合、顧客と営業担当者を関連付けるクエリ)が含まれている必要があります。次に、次のようにテーブル(この場合はinvoices
)を更新します。
update TableToUpdate ttu, MyView mv
set ttu.column = mv.column
where ttu.key = mv.key