瑾儿 发表于 2023-9-14 12:00:49

MySQL:更新表中与其他查询结果匹配的所有行

我编写了一个查询,返回了将 Customer和Salespeoeple 关联的行。
请注意,查询将联接多个数据库表。请注意,并非所有客户都有销售人员。
c_id   c_name   s_id   s_name
24microsoft      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)
使用联接
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
页: [1]
查看完整版本: MySQL:更新表中与其他查询结果匹配的所有行