[英]You can't specify target table 'barang' for update in FROM clause
我有問題更新列jml_tersedia
從表barang
。 該值應為: 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';
它給了我You can't specify target table 'barang' for update in FROM clause
。 有人可以幫忙嗎? 謝謝。
MySQL不允許您修改從中選擇的同一張表,但允許您在UPDATE
子句中指定多個表。
我已將您的UPDATE
查詢改寫為使用LEFT JOIN
而不是嵌套的sub 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';
而且,如果此答案不適合您,那么您也可以查看這些出色的 答案以找到替代解決方案。
最后,您可以查閱MySQL的文檔以了解有關UPDATE Syntax的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.