0

私は現在 SQLBase データベースを実行しており、重複したアイテムを選択して削除することをいくつか試しました。

ここにシナリオがあります:

Tablename: test1

||=========||=========||==================||
|| column1 || column2 || rowid            ||
||=========||=========||==================||
||    1    ||    1    || AAAAAAAAAAAAAAAA ||
||    1    ||    1    || BBBBBBBBBBBBBBBB ||
||    1    ||    1    || CCCCCCCCCCCCCCCC ||
||    1    ||    2    || DDDDDDDDDDDDDDDD ||
||    1    ||    2    || EEEEEEEEEEEEEEEE ||
||    1    ||    3    || FFFFFFFFFFFFFFFF ||
||    1    ||    4    || GGGGGGGGGGGGGGGG ||
||=========||=========||==================||

RowID は仮想列です。これはシステムによって作成されます。

私がやりたいのは、すべての重複を削除することなので、最終的には次のようになります。

||=========||=========||==================||
|| column1 || column2 || rowid            ||
||=========||=========||==================||
||    1    ||    1    || AAAAAAAAAAAAAAAA ||
||    1    ||    2    || DDDDDDDDDDDDDDDD ||
||    1    ||    3    || FFFFFFFFFFFFFFFF ||
||    1    ||    4    || GGGGGGGGGGGGGGGG ||
||=========||=========||==================||

問題は、それが SQLBase にあり、複製を反復する関数がないことです。

次のような重複を見つけます:

SELECT column1, column2 COUNT(*) 
FROM test1 
GROUP BY column1, column2 
HAVING COUNT(*) > 1;

そして、私の問題があります。その時点からそれらを削除する方法が見つかりません。また、ステートメントのために、明らかにrowid重複選択に追加できません。group by

column1重複を削除して、 undの各組み合わせのエントリを 1 つだけにする可能性はありますcolumn2か?

4

3 に答える 3

-1

これらの目的では、SqlBase は他の DBMS ほど寛容ではありません。

最も簡単な方法は、delete ステートメントを自動生成することです。

select 'delete from test1 where rowid = ''' || a.rowid ''';' from test1 a where a.rowid not in ( select max (x.rowid) from test1 x group by x.column1, x.column2 );

于 2017-01-02T15:52:37.910 に答える