让我们说我有一个声明为UNIQUE的列,上面填充了人名:
Mary
John
Michel
&Mary
Kevin
我想从name列中删除一些字符,因此我运行如下查询:
UPDATE db_name SET name = replace(name, '&', '')
但是这个查询将失败:
SQL错误(1062):重复输入' Mary'关键字'名称'
有没有办法删除行'& Mary'只有' Mary'存在?
答案 0 :(得分:0)
如果存在name ='Mary'
的字段,则此查询将删除行'& Mary'delete from db_name
where name= '&Mary' AND
EXISTS(
select 1 from db_name
where name = 'Mary'
)
答案 1 :(得分:0)
在表格上使用INNER JOIN
将&
连接到每个名称的前面,您可以执行标识和删除匹配的DELETE
。删除后,可以安全地按照您最初的预期在replace(name, '&', '')
查询中运行UPDATE
。
/* names_amp is an alias of the same table */
DELETE names_amp FROM names names_amp
/* the joining condition adds an '&' to the everything in the main table
in order to find those which match */
JOIN names ON CONCAT('&', names.name) = names_amp.name
这里有效:http://sqlfiddle.com/#!2/5832d/1
如果您不想将其应用于所有人,并且只想'Mary'
,则只需添加WHERE
条款:
DELETE names_amp FROM names names_amp
JOIN names ON CONCAT('&', names.name) = names_amp.name
WHERE names.name = 'Mary'
使用联接删除的正确语法是explained in the MySQL DELETE
syntax reference
答案 2 :(得分:0)
您可以在 ON DUPLICATE KEY
期间使用UPDATE
语法(假设您使用的是MySQL)。
使用UPDATE IGNORE
。
下面你可能会发现一个有用的技巧:
http://leo.steamr.com/2011/09/mysql-update-on-duplicate-key-delete-work-around/