1、更新一张表的某个字段,要求是更新后的名称不能和表里面现有的数据重复。
2、sql语句:
UPDATE t_lw_label_attr
SET NAME = '测试名称不能重复'
WHERE
create_id = 19
AND id = 7
AND yn = 1
AND NOT EXISTS (
SELECT
id
FROM
t_lw_label_attr
WHERE
NAME = '测试名称不能重复'
AND yn = 1
)
执行后报错:You can't specify target table 't_lw_label_attr' for update in FROM clause,大概意思就是 不能再一张表里面select出一些东西当条件,然后再更新这张表。
3、解决办法就是,再子查询外面再嵌套一层,变成一张中间表就可以了。
UPDATE t_lw_label_attr
SET NAME = '测试名称不能重复'
WHERE
create_id = 19
AND id = 7
AND yn = 1
AND NOT EXISTS (
SELECT
b.*
FROM
( SELECT id FROM t_lw_label_attr WHERE NAME = '测试名称不能重复' AND yn = 1 ) b
)