MYSQL INSERT INTO FROM SELECT UPDATE WHERE 不存在

标签 mysql select insert duplicates exists

我的数据库结构是:

items (id, item_name)
user (id, username)
inventory(id, user_id FK, item_id FK, amount)

我有一个选择查询,它返回包含 (item_id, amount) 的行

我只想将选择查询中的值添加到库存表中。 所以我需要的伪代码是:

FUNCTION give_items(IN in_user_id)

FOR EACH ROW FROM THAT SELECT:    
   IF ROW EXISTS with user_id = in_user_id AND item_id = SELECT.item_id THEN INSERT ROW
   ELSE UPDATE ROW amount = amount + SELECT.amount

这就像 INSERT INTO SELECT ... ON DUPLICATE KEY,但我需要尊重 user_id 和 item_id 而不是主键

@编辑 这就是我现在得到的:

INSERT INTO `items_inventory` (`user_id`,`item_id`,`amount`)
SELECT mu.user_id, mi.item_id, SUM(mu.amount*mi.income) as amount_sum
FROM `mining_machines_users` AS mu
LEFT JOIN `mining_machines_income` AS mi ON mu.machine_id=mi.machine_id
WHERE mu.user_id=in_user_id
GROUP BY mi.item_id
ON mu.user_id=in_user_id AND mi.item_id=VALUES(`item_id`) //NEED FIX
`amount`=`amount`+VALUES(`amount`)

抱歉我的英语不好,我希望你能帮助我:)

最佳答案

id 属性是必需的吗?否则,如果您将 user_id 和 item_id 组合为主键,可能会更容易

关于MYSQL INSERT INTO FROM SELECT UPDATE WHERE 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35585985/

相关文章:

mysql - 如何在mysql查询中的另一个选择(子查询)中使用选择?

Mongodb 插入未成功完成(使用 node.js)

c# - 如何在datagridview插入后立即刷新或显示?

mysql - 我的一张 table 突然消失了,我该如何追踪?

php - 使用 PDO 准备好的语句插入 fatal error

java - 连接Java和Mysql

jquery - Chrome 中选择选项元素上的单击事件

mysql - 多选查询 MySQL

mysql - 安全地杀死一个删除大号。 mysql中的记录

sql - 对 2 个表使用插入/更新 - Oracle Apex