INSERT IGNORE带WHERE子句语法报错,需复制指定记录并修改字段
解决MySQL复制指定记录并修改字段的语法错误问题
你原本的SQL语句试图复制membership表中Member_id为'A4C1905'的记录并修改部分字段,但因为错误地在INSERT INTO后添加WHERE子句导致语法错误。
原错误SQL语句
$sql = "INSERT IGNORE INTO membership WHERE Member_id= 'A4C1905' (`Name`,`GivenName`,`SpouceName`,`SpouceGiven`,`Address`,`City`,`Prov`,`PostalCode`,`Phone`,`Email`,`Secondary Email`,`Region`,`Year`,`visible`,`Mailing_Info`,`Member_ID`,`LastUpdateDate`,`Payment_Date`,`Payment_Type`,`Payment_Amount`,`Payment_Comment`,`Payment_Year`,`Nonrenreason`) VALUES ('Ruck','John', 'Joan', 'Clint', '2045 Lakeshore Blvd. W. Suite # 3803 ', 'Toronto ', 'ON', 'L0P 1K0', '905-877-9812', 'tow.t@hotmail.com', '', 'GPR', '2025', 'N', 'Mr. Clint Adcock','' , '2024-10-14', '2024-10-14', 'Cheque', '50', 'no comment', '2025','ill' )";
触发的错误提示
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE Member_id= 'A4C1905' (
Name,GivenName,SpouceName,SpouceGiven,`Addre' at line 1
解决方案
INSERT INTO ... VALUES语法不支持添加WHERE子句,要实现复制指定记录并修改部分字段的需求,应该使用INSERT INTO ... SELECT语法:通过SELECT语句获取目标记录的字段值,同时在SELECT中替换需要修改的字段内容,最后通过WHERE筛选要复制的原记录。
修正后的SQL语句示例:
INSERT IGNORE INTO membership (`Name`,`GivenName`,`SpouceName`,`SpouceGiven`,`Address`,`City`,`Prov`,`PostalCode`,`Phone`,`Email`,`Secondary Email`,`Region`,`Year`,`visible`,`Mailing_Info`,`Member_ID`,`LastUpdateDate`,`Payment_Date`,`Payment_Type`,`Payment_Amount`,`Payment_Comment`,`Payment_Year`,`Nonrenreason`) SELECT 'Ruck', -- 修改Name字段 'John', -- 修改GivenName字段 'Joan', -- 修改SpouceName字段 'Clint', -- 修改SpouceGiven字段 '2045 Lakeshore Blvd. W. Suite # 3803 ', -- 修改Address字段 'Toronto ', -- 修改City字段 membership.Prov, -- 保留原Prov字段值 'L0P 1K0', -- 修改PostalCode字段 '905-877-9812', -- 修改Phone字段 'tow.t@hotmail.com', -- 修改Email字段 '', -- 修改Secondary Email字段 'GPR', -- 修改Region字段 '2025', -- 修改Year字段 'N', -- 修改visible字段 'Mr. Clint Adcock', -- 修改Mailing_Info字段 '', -- 修改Member_ID字段 '2024-10-14', -- 修改LastUpdateDate字段 '2024-10-14', -- 修改Payment_Date字段 'Cheque', -- 修改Payment_Type字段 '50', -- 修改Payment_Amount字段 'no comment', -- 修改Payment_Comment字段 '2025', -- 修改Payment_Year字段 'ill' -- 修改Nonrenreason字段 FROM membership WHERE Member_id= 'A4C1905';
说明
- 如果有字段不需要修改,直接写
membership.字段名即可复用原记录的值,示例中Prov字段就保留了原记录内容。 INSERT IGNORE会忽略因唯一键冲突等原因导致的插入失败,避免报错。
内容的提问来源于stack exchange,提问作者Rick harper
相关产品推荐
相关产品推荐

