【问题标题】:MYSQL INSERT INTO FROM SELECT UPDATE WHERE NOT EXISTMYSQL INSERT INTO FROM SELECT UPDATE WHERE NOT EXIST
【发布时间】:2016-06-05 18:55:31
【问题描述】:

我的数据库结构是:

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 而不是 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`)

对不起,我的英语不好,我希望你能帮助我:)

【问题讨论】:

  • 你为什么大喊大叫?

标签: mysql select insert duplicates exists


【解决方案1】:

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

【讨论】:

  • 不,没必要
  • 如果您创建一个组合键,这将确保 user_id、item_id 必须是唯一的。
  • 我可以在插入中返回该选择查询的结果吗?
  • 是的,应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多