根据MySQL中的某些条件插入或更新

时间:2013-09-10 15:15:36

标签: mysql sql-insert

阅读MySQL文档后,我没有找到问题的答案!让我解释一下我要做的事情:

我想在我的表中插入一个新行。如果我要插入的行的某些列已经存在于表的另一行中,则必须将其替换。这是我的CURRENT MySQL句子:

INSERT INTO responses (ref_user_id, ref_proposal_id, user_name, response)
SELECT user_id, proposal_id, '$response_name', '$response_response_type'
FROM users, proposals
WHERE private_user_id = 'some_input_data_1'
  AND public_proposal_id = '$some_input_data_2'

具体地说,如果任何行包含相同的'ref_user_id'和'ref_proposal_id',则必须替换它。提前谢谢,

PS:我猜解决方案是某种INSERT或UPDATE,但我找不到方法。

2 个答案:

答案 0 :(得分:2)

您只需使用INSERT..ON DUPLICATE KEY UPDATE

即可

在其他任何事情之前,您需要为两个列创建一个唯一约束以使其正常工作,

ALTER TABLE responses ADD CONSTRAINT uq_col UNIQUE (ref_user_id, ref_proposal_id)

并执行以下语句

INSERT INTO responses (ref_user_id, ref_proposal_id, user_name, response)
SELECT user_id, proposal_id, '$response_name', '$response_response_type'
FROM   users, proposals
WHERE  private_user_id = 'some_input_data_1' AND 
       public_proposal_id = '$some_input_data_2'
ON DUPLICATE KEY UPDATE user_name = '$response_name',
                        response = '$response_response_type'

作为旁注,请修改您加入表格的方式,它会返回您可能不想要的笛卡儿产品。

答案 1 :(得分:0)

虽然效率不如491243建议的那样简单,但是要做一个测试查询,看看是否存在符合您标准的行。如果您这样做,请进行更新,如果没有,请执行插入操作。