1

プロジェクトごとに1つの行を返す必要があるSQLサーバーのビューがあります。いくつかのプロジェクトには複数の行があります。ビューには多くのテーブル結合があるため、各テーブルでスクリプトを手動で実行して、重複の原因となっているテーブルを見つける必要はありません。問題のあるテーブル(行が重複しているテーブル)をすばやく自動で見つける方法はありますか?

4

3 に答える 3

4

私が見つけた最も簡単な方法は次のとおりです。

  1. デュープの例を見つける
  2. クエリをコピーします
  3. すべての参加をコメントアウトする
  4. 別の行を取得するまで、結合を一度に1つずつ追加します。

デュープを取得し始めた場所が何であれ、複数のレコードがある場所です。

于 2013-01-09T15:18:09.360 に答える
1

私のテクニックは、ビューのコピーを作成し、それを変更して、FROM句の順序ですべてのテーブルからすべての列を返し、その間にテーブル名を列名として追加の列を含めることです(以下の例を参照)。次に、いくつかの行を選択し、重複する行データがないテーブルが見つかるまでゆっくりと右にスキャンします。これが重複の原因です。

SELECT
   TableA = '----------', TableA.*,
   TableB = '----------', TableB.*
FROM ...

これは通常、見つけるのに非常に速い方法です。結合をコメントアウトする場合の問題は、select句の一致する列も毎回コメントアウトする必要があることです。

于 2013-01-09T15:53:36.697 に答える
0

SpectralGhostの手法のバリエーションを使用してこれを機能させましたが、どちらの方法でも、各テーブルで重複行がないか手動でチェックすることを回避するという問題は実際には解決されません。
私のバリエーションは、分割統治法を使用して、各結合を個別にコメントアウトするのではなく、結合をコメントアウトすることでした。結合の数が非常に多いため、これははるかに高速でした。

于 2013-01-09T15:46:27.607 に答える