我正在尝试对包含与 Oracle 11g 下人员有关的记录的表进行更新。我有一列包含 ID,其中一些包含连字符。该表对此 ID 有限制,因此两个不同的人不能拥有相同的 ID。我的目标是删除连字符,同时在我进行更新时避免任何违反约束的情况。所以我尝试了这个查询来检测违反约束的记录:
SELECT count(*) FROM people
WHERE externalid LIKE '%-%' AND
replace(externalid, '-') IS IN (SELECT externalid FROM people);
然后失败并出现 ORA-00908: missing NULL 关键字。我知道这是由于最后一行,但我不知道如何构造查询的该部分以检测已使用非连字符 ID 的记录。如何检测这些违反约束的记录?