1

4 つの列と数千のレコードを持つテーブルがあります。3つの列(col1、col2、col3など)に基づいて重複する行を削除したい。次のような基準に基づいて行を削除する必要があります

1) found a row which has col1 and col2 equal and
2) in those duplicate record i have to delete those rows on which col3 is null- keep  one row
  (if no other record with combination of col1 and col2 doesn't have not null col3) 

col1 col2 col3
---- ---- ----
1    1    null
1    1    null
1    2    null
1    2    1
1    2    1
1    2    null
1    2    2
1    2    3

この例では、1または2のいずれかを削除したい.3,4,5,6には重複した列があり、それらのいくつかには3番目の列がnullではなく、3番目の列がnullでない1行のみを保持したい(if third列も同じで、1行のみを保持します)

4

2 に答える 2

2

次のようなデータがあるとします。

col1 col2 col3
---- ---- ----
1 1 null
1 1 null
1 2 null
1 2 1
1 2 2
1 2 3
1 2 null

col1とがcol2一致し、col3両方でnullであるため、最初の2行を削除しても大丈夫ですか?そうでない場合は、ここに私のSQLがあります:

DELETE FROM table_name A
WHERE  exists (
  SELECT 1
  FROM table_name B
  WHERE A.col1 = B.col1
  AND   A.col2 = B.col2
  AND   B.col3 is not null)
AND A.col3 is null
于 2012-07-20T13:24:01.460 に答える
0
DELETE FROM table_name A WHERE ROWID > (SELECT min(rowid) FROM table_name B
WHERE A.clmn1 = B.clmn1 AND A.clmn2 = B.clmn2 AND A.clmn3 is NULL AND b.clmn3 is NULL);

これを確認してください..エラーがある場合はコメントしてください。

于 2012-07-20T13:07:19.083 に答える