2017-05-05 47 views
2

私はテーブルを持っていますが、新しい値で古い値を挿入したいが、ユニークなものだけを挿入したい。同じテーブルにユニークな値を挿入

t1 

ID  | Block  | Flats | 
1  |  1  |  GF-1 | 
2  |  1  |  GF-2 | 
3  |  2  |  GF-1 | 
4  |  2  |  GF-2 | 
5  |  2  |  GF-2 | 

それだけで異なる値とGF-2は、一度だけ来たコピーコピー後のように、これは私がそれをコピーした後

ID  | Block  | Flats | 
1  |  1  |  GF-1 | 
2  |  1  |  GF-2 | 
3  |  2  |  GF-1 | 
4  |  2  |  GF-2 | 
5  |  2  |  GF-2 | 
6  |  1  |  GF-1 | 
7  |  1  |  GF-2 | 
8  |  2  |  GF-1 | 
9  |  2  |  GF-2 | 

になりたいいくつかのサンプルデータと私のテーブルの一部です。 しかし、私は

insert into t1 (ID,Block,Flats) select distinct Block,Flats from t1 

それのコピーをしようとしたときにそのGF-2倍ブロックで2

注:ID列が自動的に1ずつインクリメントされます。

+0

ブロックまたはフラット列に先頭または末尾に空白がないことを確認してください。 –

+0

@vkpいいえありません。私がselect distinct Block、flatsをt1から実行すると、重複していない同じ出力が得られます – Bilal

+0

テーブルにトリガーがありますか? – HLGEM

答えて

2

あなたは、その後、cross joinを使用してすべての行を生成することができますが、すでに存在するものを取り除く:

insert into t1(block, flats) 
    select b.block, f.flats 
    from (select distinct block from t1) b cross join 
     (select distinct flats from t1) f left join 
     t1 
     on t1.block = b.block and t1.flats = f.flats 
    where t1.block is null; 

注:これはidは、私はあなたがあるとして説明している参照されidentity列(であることを前提としてい場合)。

+0

初心者のために申し訳ありません。これはサンプルだった。実際のシナリオでは、2つ以上の列が入力されています。この問い合わせのケースではどうなりますか?私はどの選択から彼らの出力を得るのか分かりません。 – Bilal

関連する問題