【问题标题】:Update same tables from from select value from same table mysql从同一个表mysql的选择值更新同一个表
【发布时间】:2018-03-16 07:13:02
【问题描述】:

我正在尝试更新从同一表中选择的同一列的表列。 这是代码(更新)

     public function UpdateStockIn($id, $subUnitValue) {
    $query = "UPDATE BRAND_LIST SET CURRENT_STOCK_BOTTLE = (SELECT CURRENT_STOCK_BOTTLE FROM BRAND_LIST WHERE ID = ?) + '.$subUnitValue.' WHERE ID = ? ";
    $success = 0;
    try {
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $id);
        $stmt->bindParam(2, $id);

        $stmt->execute();
        $success = 1;
    } catch (PDOException $ex) {
        echo $ex->getMessage();
    }
    return $success;
}

它显示这样的错误 您不能在 FROM 子句中指定目标表 'BRAND_LIST' 进行更新

【问题讨论】:

  • 为什么在您的查询中使用 $subUnitValue??
  • 您的查询没有意义,因为子查询不相关。请用清晰的英语告诉我们您要在这里做什么。
  • 我想加上 $subUnitValue 和选定的值
  • 为什么要这样做? mysql不支持这种类型的查询

标签: mysql


【解决方案1】:

尝试运行这两个 sql,第一个将值存储到 mysql 局部变量中,然后用于第二个 sql。

 SELECT @old_subUnitValue := GROUP_CONCAT(table1.CURRENT_STOCK_BOTTLE) FROM BRAND_LIST AS table1 WHERE table1.ID=2;

 UPDATE BRAND_LIST AS table2 SET table2.CURRENT_STOCK_BOTTLE =  @old_subUnitValue + '.$subUnitValue.' WHERE table2.ID=2; 

【讨论】:

    【解决方案2】:

    使用下面的查询

    $query = "UPDATE BRAND_LIST SET CURRENT_STOCK_BOTTLE = CURRENT_STOCK_BOTTLE + ".$subUnitValue."  WHERE ID = ?";
    

    【讨论】:

    • 正常但还是 sql 错误,像这样 'QLSTATE[HY000]: General error: 1093 You can't specify target table 'BRAND_LIST' for update in FROM 子句'
    • 现在检查并删除 $stmt->bindParam(2, $id);行
    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多