6

Oracle 11g の下の人に関するレコードを含むテーブルを更新しようとしています。ID を含む列があり、その一部にはハイフンが含まれています。テーブルにはこの ID に関する制約があるため、2 人の異なる人が同じ ID を持つことはできません。私の目標は、更新時に制約違反を回避しながら、ハイフンを削除することです。そこで、制約に違反するレコードを検出するために、次のクエリを試しました。

SELECT count(*) FROM people
WHERE externalid LIKE '%-%' AND
replace(externalid, '-') IS IN (SELECT externalid FROM people);

これは、ORA-00908: NULL キーワードがありませんで失敗します。これが最後の行によるものであることはわかっていますが、クエリのその部分を構造化して、ハイフンなしの ID が既に使用されているレコードを検出する方法が他にわかりません。制約に違反するこれらのレコードを検出するにはどうすればよいですか?

4

2 に答える 2

15

キーワードは、キーワードと一緒ではなく、 のISように使用されます。これが、データベースが NULL が欠落していると考える理由です。を削除するだけです:something IS NULLINIS

SELECT count(*) FROM people
WHERE externalid LIKE '%-%' AND
replace(externalid, '-') IN (SELECT externalid FROM people);
于 2013-02-28T19:22:49.730 に答える
2

これがオラクルで機能するかどうかはわかりませんが、試してみる価値があります:

SELECT * FROM people p1
Inner Join people p2 on replace(p1.externalid, '-') = p2.externalid
and p1.externalid < p2.externalid --prevents duplicate matches
Where p1.externalid LIKE '%-%'
于 2013-02-28T19:22:59.727 に答える