MYSQL 从 SELECT 插入不存在的更新
MYSQL INSERT INTO FROM SELECT UPDATE WHERE NOT EXIST
我的数据库结构是:
items (id, item_name)
user (id, username)
inventory(id, user_id FK, item_id FK, amount)
我有一个 select 查询,其中 returns 行包含 (item_id, amount)
我只想将该 select 查询中的值添加到该清单 table 中。
所以我需要的伪代码是:
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 而不是 PRIMARY KEY
@编辑
这是我现在得到的:
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
的组合主键可能会更容易
我的数据库结构是:
items (id, item_name)
user (id, username)
inventory(id, user_id FK, item_id FK, amount)
我有一个 select 查询,其中 returns 行包含 (item_id, amount)
我只想将该 select 查询中的值添加到该清单 table 中。 所以我需要的伪代码是:
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 而不是 PRIMARY KEY
@编辑 这是我现在得到的:
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
的组合主键可能会更容易