代码之家  ›  专栏  ›  技术社区  ›  Álvaro González

用另一个表中的值更新表

  •  5
  • Álvaro González  · 技术社区  · 14 年前

    我有这些桌子:

    customer:
        customer_id vat_number
        =========== ==========
                  1 ES-0000001
                  2 ES-0000002
                  3 ES-0000003
    
    
    invoice:
        invoice_id customer_id vat_number
        ========== =========== ==========
               100           1 NULL
               101           3 NULL
               102           3 NULL
               103           2 NULL
               104           3 NULL
               105           1 NULL
    

    我要在以下位置填充空值 invoice.vat_number 当前值来自 customer.vat_number . 可以用一个SQL语句来完成吗?

    到目前为止我所掌握的内容引发了一个语法错误:

    UPDATE invoice
    SET vat_number=cu.vat_number /* Syntax error around here */
    FROM invoice iv
    INNER JOIN customer cu ON iv.customer_id=cu.customer_id
    WHERE invoice.invoice_id=iv.invoice_id;
    
    4 回复  |  直到 12 年前
        1
  •  4
  •   OMG Ponies    14 年前

    使用mysql、ansi-92连接语法:

    UPDATE INVOICE
      JOIN CUSTOMER ON CUSTOMER.customer_id = INVOICE.customer_id
       SET vat_number = CUSTOMER.vat_number  
     WHERE INVOICE.vat_number IS NULL
    

    使用mysql、ansi-89连接语法:

    UPDATE INVOICE, CUSTOMER 
       SET INVOICE.vat_number = CUSTOMER.vat_number  
     WHERE CUSTOMER.customer_id = INVOICE.customer_id
       AND INVOICE.vat_number IS NULL
    

    为了 more info, see the MySQL UPDATE documentation . 这是MySQL特定的更新语句语法,不太可能在其他数据库上受支持。

        2
  •  4
  •   Conrad Frix    14 年前
    UPDATE invoice i, customer cu SET i.vat_number=cu.vat_number 
    WHERE i.customer_id = cu.customer_id;
    

    干得好


    在此处设置vat_number=cu.vat_number/*语法错误*/ 错误是因为var_number列名称不明确-MySQL不知道这是i.vat_number还是cu,vat_number。

        3
  •  3
  •   user180100    14 年前

    比如:

    UPDATE invoice in
    SET vat_number=(SELECT cu.vat_number FROM customer cu 
    WHERE in.customer_id=cu.customer_id)
    -- not tested
    
        4
  •  0
  •   franklins    13 年前
    UPDATE iv
    SET iv.vat_number=cu.vat_number
    FROM invoice iv
    INNER JOIN customer cu ON iv.customer_id=cu.customer_id