Обновить таблицу значениями из другой таблицы - PullRequest
5 голосов
/ 21 октября 2010

У меня есть эти таблицы:

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

Я хочу заполнить значения 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 ]

4 голосов
/ 21 октября 2010

Использование MySQL, синтаксис ANSI-92 JOIN:

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 JOIN:

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

Подробнее см. ОБНОВЛЕНИЕ MySQLдокументация .Это специфический для MySQL синтаксис оператора UPDATE, который вряд ли будет поддерживаться в других базах данных.

4 голосов
/ 21 октября 2010
UPDATE invoice i, customer cu SET i.vat_number=cu.vat_number 
WHERE i.customer_id = cu.customer_id;

Вот, пожалуйста,


SET vat_number = cu.vat_number / * Синтаксическая ошибка здесь * / Ошибка в том, что имя столбца var_number неоднозначно - MySQL не знает, если этоi.vat_number или cu, vat_number.

3 голосов
/ 21 октября 2010

Что-то вроде:

UPDATE invoice in
SET vat_number=(SELECT cu.vat_number FROM customer cu 
WHERE in.customer_id=cu.customer_id)
-- not tested
0 голосов
/ 21 октября 2010
UPDATE iv
SET iv.vat_number=cu.vat_number
FROM invoice iv
INNER JOIN customer cu ON iv.customer_id=cu.customer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...