1

中間テーブルを使用せずに、teradata のマルチセット テーブルから重複レコードを削除できますか。

マルチセットテーブルに値が 1、2、3 と 1、2、3 の 2 つの行があるとします。削除後は、1、2、3 の 1 つの行しかないはずです。

4

4 に答える 4

4

システムで ROWID の使用が有効になっていない限り、それはできません (可能性はかなり低いです)。SELECT ROWID FROM テーブルを説明しようとすることで、簡単にテストできます。

それ以外の場合、2 つの方法が考えられます。

重複数が少ない:

  • 結果として新しいテーブルを作成するSELECT all columns FROM table GROUP BY all columns HAVING COUNT(*) > 1;
  • DELETE FROM tab WHERE EXISTS (SELECT * FROM newtab WHERE...)
  • INSERT INTO tab SELECT * FROM newtab

重複の数が多い:

  • SET TABLE を使用して新しいテーブルにSELECT DISTINCT *コピーするか、SET TABLE にコピーして重複を取り除き、再度 INSERT して戻します
于 2013-10-23T17:59:12.620 に答える
0

同じアプローチを使用しますが、途中で揮発性テーブルを作成します。

CREATE VOLATILE MULTISET TABLE TEMPDB.TEMP_DUP_ID (
Row_ID DECIMAL(31,0) ) PRIMARY INDEX (Row_ID) ON COMMIT PRESERVE ROWS;

INSERT INTO TEMPDB.TEMP_DUP_ID SELECT ROW_ID FROM DB.TABLE T QUALIFY ROW_NUMBER() OVER (PARTITION BY DUP ORDER BY DUP DESC) > 1

次に、テーブルを使用して削除します。

理想的には、行ごとに一意のキーを持つことになります。それ以外の場合は、データをもう少し操作して生成する必要があります (たとえば、row_number() を使用して...これは単なる推奨事項です)。

于 2017-06-08T05:58:27.187 に答える