pk canidateが鍵のないテーブルに重複している理由を見つけるためのsql
-
10-10-2019 - |
質問
私のタイトルがあなたの頭を傷つけたら...私はあなたと一緒です。私は、このテーブルがレガシーシステムの一部であることを除いて、このテーブルが存在する理由にはなりたくありません。また、システムは「レコードレベルアクセス」(RLA)を実行します。列を追加するとテーブル形式が変更され、非常に古いプログラムの多くが機能しなくなるために言及されています...
どうやらPKを追加して、テーブル形式を変更しないことが示されています。だから、特定のキーのセットがユニークであることが保証されていると言われました。そして今、私は彼らがそうでない場所を示す必要があります。
私が考えることができるのは:
テーブルがプライマリキーで一致するクロス製品を取得します。
どういうわけか、PKが自分自身と一致するエントリの数の結果セットにカウント列を取得します。
IDが2を超える値に設定された結果をフィルタリングします。
PKを十分に拡張するかどうかを確認します。実際にユニークなものを見つけます。
解決
制約 /一意のインデックスを削除し、データを挿入してから、このクエリを実行します。
SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1
どこ col1, col2, ..., coln
キー(1つ以上の列)の列のリストです。結果は、それらが発生する頻度を示すカウントとともに、複数回発生するキーのリストになります。
他のヒント
select col1, ... from tab group by col1, ... having count(*)>1;
SELECT * FROM (SELECT ID, COUNT(*) CNT FROM MY_TABLE GROUP BY ID) WHERE CNT > 1
所属していません StackOverflow