2

私の肩書があなたの頭を傷つけるなら. 私はあなたと一緒にいます. このテーブルがレガシーシステムの一部であることを除いて、なぜ存在するのかを知りたくありません。また、システムは「レコードレベルアクセス」(RLA)を行います。これは、多くのテーブルにとって問題になることがわかっています。列を追加するとテーブル形式が変更され、多くの非常に古いプログラムが機能しなくなるため、言及されています...

どうやら PK を追加しても、テーブルの形式は変わらないことが示されています。それで、特定のキーのセットは一意であることが保証されていると言われましたが、そうではありません。そして今、私は彼らがどこにいないのかを示す必要があります.

私が考えることができるのは次のとおりです。

テーブルが主キーで一致するクロス積を取得します。

どういうわけか、PK がそれ自身と一致するエントリの数の結果セットにカウント列を取得します。

カウント ID が 2 より大きい値の結果セットをフィルタリングします。

PK を十分に拡張すると、実際に何かユニークなものが見つかるかどうかを確認します。

4

3 に答える 3

4

制約/一意のインデックスを削除し、データを挿入してから、次のクエリを実行します。

SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1

キー内のcol1, col2, ..., coln列のリスト (1 つ以上の列) です。結果は、複数回発生するキーのリストと、発生頻度を示すカウントになります。

于 2010-12-14T22:08:51.147 に答える
3
select col1, ... from tab group by col1, ... having count(*)>1;
于 2010-12-14T22:10:16.850 に答える
2
SELECT * FROM (SELECT ID, COUNT(*) CNT FROM MY_TABLE GROUP BY ID) WHERE CNT > 1
于 2010-12-14T22:09:46.680 に答える