Как обновить столбец таблицы на основе данных из той же таблицы (с объединениями) - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь обновить каждую строку своей таблицы счетов-фактур, чтобы она содержала сумму налога для этого счета.Это рассчитывается путем получения процента налога, связанного с продавцом, и умножения его на сумму счета (очевидно).Моя проблема в том, что я пытаюсь обновить таблицу с данными из той же таблицы, объединенной с другими.В настоящее время мой запрос, показанный ниже, выдает ошибки:

Error Code: 1093. Table 'tblVendorInvoices' is specified twice, both as a target for 'UPDATE' and as a separate source for data

при удалении оператора WHERE &

Error Code: 1054. Unknown column 'a.VENDORINVOICEID' in 'where clause'

СWHERE.

Вот мой запрос:

UPDATE tblVendorInvoices SET VdrTaxAmount = 
(SELECT round(VdrInvoiceAmount*TaxAmount,2) FROM tblVendorInvoices a
LEFT JOIN tblVendors ON a.VendorName = tblVendors.VendorID
LEFT JOIN tblTax on tblVendors.vdrtaxid = tblTax.TAXID)
WHERE a.VENDORINVOICEID = tblVendorInvoices.VENDORINVOICEID;

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

В MySQL используйте коррелированный подзапрос. Я думаю, что это логика, которую вы хотите:

UPDATE tblVendorInvoices i
    SET VdrTaxAmount = 
        (SELECT round(VdrInvoiceAmount*TaxAmount,2)
         FROM tblVendors v JOIN
              tblTax t
              ON v.vdrtaxid = t.TAXID
         WHERE i.VendorID = v.VendorID
        );
0 голосов
/ 10 июля 2019

Попробуйте это

UPDATE tblVendorInvoices SET VdrTaxAmount = 
(SELECT round(VdrInvoiceAmount*TaxAmount,2) 
FROM tblVendorInvoices as A
LEFT JOIN tblVendors as V ON a.VendorName = V.VendorID
LEFT JOIN tblTax on V.vdrtaxid = tblTax.TAXID)
WHERE A.VENDORINVOICEID = V.VENDORINVOICEID;

Вы получаете эту ошибку, потому что вы не указали, какую таблицу и столбец использовать в операторе where: ГДЕ a.VENDORINVOICEID = tblVendorInvoices.VENDORINVOICEID; Вы используете ту же таблицу и столбец. Вы также можете посмотреть на свой первый оператор соединения, потому что вы можете пытаться соединить строку и INT, и это не сработает. Вам необходимо объединить два столбца с одинаковым типом данных. Я не знаю, какой тип данных у каждого из ваших столбцов.

0 голосов
/ 10 июля 2019

Это должно работать

UPDATE tblVendorInvoices SET VdrTaxAmount = c.Amount
from
(SELECT VENDORINVOICEID,round(VdrInvoiceAmount*TaxAmount,2) Amount FROM tblVendorInvoices a
LEFT JOIN tblVendors ON a.VendorName = tblVendors.VendorID
LEFT JOIN tblTax on tblVendors.vdrtaxid = tblTax.TAXID)c
WHERE c.VENDORINVOICEID = tblVendorInvoices.VENDORINVOICEID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...