0

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

我想在我的表中插入一个新行。如果我要插入的行的某些列已经存在于表的另一行中,则必须替换它。这是我当前的 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 但我没有找到方法。

4

2 回答 2

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'

作为旁注,请修复您加入表格的方式,它会返回您可能不想要的笛卡尔积。

于 2013-09-10T15:19:18.653 回答
0

简单的方法,虽然不如 491243 建议的那么有效,但会做一个测试查询,看看是否存在符合您的条件的行。如果你做了,做一个更新,如果没有,做一个插入。

于 2013-09-10T15:27:21.417 回答