簡體   English   中英

MySQL:更新表中與其他查詢的結果匹配的所有行

[英]MySQL: Update all rows in a table matching results of another query

我寫了一個查詢返回關聯Customers和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

我的數據庫中還有一個表(稱為發票 ),如下所示。

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)

使用JOIN

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_idNULL

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;

我建議首先使用上面的JOIN測試開發或運行SELECT查詢以確保結果。

您可以創建一個視圖以使UPDATE語句變得簡單。 視圖應包含您的查詢(在您的情況下是關聯客戶和銷售人員的查詢)。 然后像這樣更新你的表(在你的情況下的invoices ):

update TableToUpdate ttu, MyView mv
set ttu.column = mv.column
where ttu.key = mv.key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM