阅读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,但我找不到方法。
答案 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建议的那样简单,但是要做一个测试查询,看看是否存在符合您标准的行。如果您这样做,请进行更新,如果没有,请执行插入操作。