我正在尝试对包含与Oracle 11g下的人员相关的记录的表进行更新.我有一个包含ID的列,其中一些包含连字符.该表对此ID有约束,因此两个不同的人不能拥有相同的ID.我的目标是删除连字符,同时避免在进行更新时出现任何约束违规.所以我尝试了这个查询来检测违反约束的记录:
SELECT count(*) FROM people
WHERE externalid LIKE '%-%' AND
replace(externalid, '-') IS IN (SELECT externalid FROM people);
Run Code Online (Sandbox Code Playgroud)
然后使用ORA-00908:缺少NULL关键字失败.我知道这是由于最后一行,但我不知道如何构造查询的那一部分以检测已经使用非连字ID的记录.如何检测违反约束的这些记录?
Guf*_*ffa 14
所述IS关键字被用作something IS NULL,不与IN关键字.这就是数据库认为缺少NULL的原因.只需删除IS:
SELECT count(*) FROM people
WHERE externalid LIKE '%-%' AND
replace(externalid, '-') IN (SELECT externalid FROM people);
Run Code Online (Sandbox Code Playgroud)