mysql - 如何使用 where 子句进行 UPSERT

标签 mysql sql sql-update insert-update

我上网寻找并回答这个问题,但找不到答案。

我想在更新或插入之前检查四列。我无法使用 INSERT...ON DUPLICATE KEY UPDATE 因为它不允许使用 where 子句。所以我尝试使用我创建的以下语句。

"SELECT COUNT(id) INTO @count FROM room_prices WHERE (hotel_di = $hotel_id AND room_id = $room_id AND period_id = $periodId AND meal_plan_id = $mealPlanId) "
                . "IF @count > 0 THEN "
                . "UPDATE room_prices SET price = $price WHERE (hotel_di = $hotel_id AND room_id = $room_id AND period_id = $periodId AND meal_plan_id = $mealPlanId) "
                . "ELSE "
                . "INSERT INTO room_prices (hotel_id, room_id, period_id, meal_plan_id, price) VALUES ($hotel_id, $room_id, $periodId, $mealPlanId, $price) "
                . "END IF"

但是这个也不起作用。它给出了这个错误。

您提交的查询无效。

有什么办法可以做到这一点吗?

最佳答案

hotel_idroom_idperiod_idmeal_plan_id 上的唯一索引开始:

CREATE UNIQUE INDEX idx_room_prices_4 on room_prices(hotel_id, room_id, period_id, meal_plan_id)

然后您可以使用重复 key 更新:

INSERT INTO room_prices(hotel_id, room_id, period_id, meal_plan_id, price) 
    SELECT $hotel_id, $room_id, $periodId, $mealPlanId, $price
    ON DUPLICATE KEY UPDATE price = $price;

关于mysql - 如何使用 where 子句进行 UPSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964267/

相关文章:

sql - sql表中各行的总和

php - JQuery Full Calendar 使用 PHP 限制事件

PHP - PostgreSQL 更新表时出错

Php mysql while循环获取行

mysql - 无法通过 SSL 连接到 Google SQL

c# - 插入 Cast 数据和空字段 C# 时出错

mysql - PHP/MySQL - 使用重复条目更新行

MySQL where 子句后的序号

mysql - 如何为用户 Z 处的余额 Y 设置默认值 X

php - CakePHP/MySQL : find with a condition for model itself and an assigned model