我在从表 barang
更新列 jml_tersedia
时遇到问题。该值应为:barang.jml_tersedia = pembelian.jml_beli - penjualan.jml_jual
。
这是我的代码:
update barang set jml_tersedia =
(
( select ifnull(sum(jml_beli), 0)
from pembelian
where pembelian.id_barang = (select id_barang
from barang
where nama_barang = 'folio')
) -
( select ifnull(sum(jml_jual), 0)
from penjualan
where penjualan.id_barang = (select id_barang
from barang
where nama_barang = 'folio')
)
)
where barang.nama_barang = 'folio';
它给了我 您不能在 FROM 子句中指定要更新的目标表 'barang'
。谁能帮忙?谢谢。
最佳答案
MySQL 不会让您修改您从中选择的同一个表,但它允许您在 UPDATE
子句中指定多个表。
我已将您的 UPDATE
查询改写为使用 LEFT JOIN
而不是嵌套的子 SELECT
。
由于我不完全确定此查询是否会完全满足您的需求,因此您应该首先验证您是否会获得 barang.jml_tersedia
所需的更新值。在这里,重新表述为 SELECT
查询:
验证:
SELECT
(
IFNULL(SUM(pb.jml_beli), 0) -
IFNULL(SUM(pj.jml_jual), 0)
) AS new_jml_tersedia
FROM
barang ba
LEFT JOIN pembelian pb ON (ba.id_barang = pb.id_barang)
LEFT JOIN penjualan pj ON (ba.id_barang = pj.id_barang)
WHERE
ba.nama_barang = 'folio';
一旦您确定它返回了正确的更新值,您就可以像这样运行它:
更新:
UPDATE
barang ba
LEFT JOIN pembelian pb ON (ba.id_barang = pb.id_barang)
LEFT JOIN penjualan pj ON (ba.id_barang = pj.id_barang)
SET
ba.jml_tersedia = (
IFNULL(SUM(pb.jml_beli), 0) -
IFNULL(SUM(pj.jml_jual), 0)
);
WHERE
ba.nama_barang = 'folio';
而且,如果这个答案不适合您,那么您还可以查看这些 excellent answers用于替代解决方案。
最后,你可以查阅MySQL的文档来了解更多关于UPDATE Syntax的信息。 .
关于mysql - 您不能在 FROM 子句中指定要更新的目标表 'barang',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892406/