中間テーブルを使用せずに、teradata のマルチセット テーブルから重複レコードを削除できますか。
マルチセットテーブルに値が 1、2、3 と 1、2、3 の 2 つの行があるとします。削除後は、1、2、3 の 1 つの行しかないはずです。
中間テーブルを使用せずに、teradata のマルチセット テーブルから重複レコードを削除できますか。
マルチセットテーブルに値が 1、2、3 と 1、2、3 の 2 つの行があるとします。削除後は、1、2、3 の 1 つの行しかないはずです。
システムで 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
重複の数が多い:
SELECT DISTINCT *
コピーするか、SET TABLE にコピーして重複を取り除き、再度 INSERT して戻します同じアプローチを使用しますが、途中で揮発性テーブルを作成します。
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() を使用して...これは単なる推奨事項です)。