2016-09-08 9 views
0

2つの列を持つ表があり、1つの列の値がNULLで、別の列に重複値と空白が多数あります。クエリで重複した値と空白をその列から削除するにはどうすればよいですか?SQL問合せで1列の重複値を削除します

+2

私たちに(1)サンプルテーブルのデータ、(2)期待される結果を見せてください。 – jarlh

+2

また、使用しているDBMSにもタグを付けてください – Susang

+0

どのrdbmsを使用していますか(例:oracleまたはms-sql-server)? –

答えて

1

を使用してあなたは以下のように、この作業のために一時テーブルを使用することができます。

SELECT DISTINCT * INTO #tmpTable FROM MyTable 
TRUNCATE TABLE MyTable 
INSERT INTO MyTable SELECT * FROM #tmpTable 
0

テーブルの空のコピーを作成できます。次に、INSERT INTO new_table SELECT DISTINCT * FROM old_tableを実行します。最後に、古いテーブルを削除し、新しいテーブルの名前を変更します。これを行うための

0

一つの方法 - CTE

create table #dups (col1 int, col2 int) 
insert into #dups 
select null,null union all 
select null,1 union all 
select null,1 union all 
select null,1 union all 
select null,2 union all 
select null,2 union all 
select null,3 union all 
select null,null 
select * from #dups 
;WITH cte 
    AS (SELECT col1,col2,ROW_NUMBER() OVER (PARTITION BY Col1,Col2 
             ORDER BY (SELECT 0)) RN 
     FROM #dups 
     ) 
DELETE FROM cte 
WHERE RN > 1 OR col2 is null 
0

1)あなたは最低のidを持つ行を保持する場合値:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name 

2)最も高いID値を持つ行を保持する場合:

DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name 

これを処理する前に、テーブルのコピーを入手してください。 私はテーブル名を私はあなたのテーブル名を置き換える私を送るよりも得ることができない場合。

それは私が右の理解場合

Delete all Duplicate Rows except for One in MySQL?

0

は、あなたがCOLUMN2のNULLとブランクのために避けたいのリンクを参照してください 他のバージョンについてのMySQL 5.1

わからないでテストされましたか?

SELECT COLUMN1, COLUMN2 FROM TABLE 
GROUP BY 
    COLUMN1, COLUMN2 
WHERE 
    COLUMN2 NOT NULL AND COULMN2 <> '' 

このクエリは、COLUMN2にデータがある場合のみ結果を表示します。

0

この

DELETE FROM [Table] 
WHERE  (ColmnB IN 
         (SELECT  ColumnB 
         FROM   [Table] AS Table_1 
         GROUP BY ColumnB 
         HAVING  (COUNT(*) > 1))) OR 
        (RTRIM(LTRIM(ISNULL(ColumnB,''))) = '') 

テーブルが牽引列を持ってしてみてください。最初の列はヌル値です。 2番目の列に重複値と空白値があります。

関連する問題