mysql - 您不能在 FROM 子句中指定要更新的目标表 'barang'

标签 mysql sql-update mysql-error-1093

我在从表 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/

相关文章:

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

php - 在 mySQL 数据库中插入多个数组值

c# - Visual Studio 2012 缺少数据源

mysql - 无法添加外键

postgresql - 在postgres中更新具有空值的整数列

php - 更新查询抛出错误

php - 尝试将每行的 2 列值相乘并打印所有行的总和

php - 在 MySQL 中同步两个表中的行数据的最佳方法是什么?

mysql - 删除 - 我不能指定目标表?