2016-09-12 10 views
1

に自分自身を更新できません:は、以下のように私のサンプルを参照してくださいSQL Server 2008 R2の

create table tbl1(cl1 int, cl2 varchar(10)) 
create table tbl2(cl1 int, cl2 varchar(10)) 

insert tbl1 
select 1, 'a' union all 
select 1, 'b' union all 
select 1, 'c' union all 
select 1, 'd' union all 
select 1, 'e' 

insert tbl2 
select 1, '' union all 
select 1, '' union all 
select 1, 'c' union all 
select 1, '' union all 
select 1, 'a' 

select * from tbl1 
select * from tbl2 

update b 
set b.cl2 = a.cl2 
from tbl1 a inner join tbl2 b on a.cl1=b.cl1 
where b.cl2 = '' and a.cl2 not in (select cl2 from tbl2 where tbl2.cl1 = a.cl1) 

私が欲しいものの値が重複していないとTBL2テーブルにCL2列で、すべての空の値を更新することです。

上記のスクリプトとして実行しようとしましたが、正しく動作しませんでした。

解決策を見つけてください。

ありがとうございました。

+0

最後のselectはtbl2へのデータの挿入用です。 –

答えて

0

このスクリプトを試してください。

create table #tbl1(cl1 int, cl2 varchar(10)) 
create table #tbl2(cl1 int, cl2 varchar(10)) 

insert #tbl1 
select 1, 'a' union all 
select 1, 'b' union all 
select 1, 'c' union all 
select 1, 'd' union all 
select 1, 'e' 

insert #tbl2 
select 1, '' union all 
select 1, '' union all 
select 1, 'c' union all 
select 1, '' union all 
select 1, 'a' 

    update b 
    set b.cl2 = a.cl2 
    from #tbl1 a inner join #tbl2 b on a.cl1=b.cl1 
    where b.cl2 = '' and a.cl2 not in (select t.cl2 from #tbl2 t where a.cl1 = a.cl1) 

Select * from #tbl1 
Select * from #tbl2 
+0

これは常にa.cl1 = a.cl1'になります。 –

+0

はい、期待どおりの出力が得られます。サブクエリから条件を削除することができます。 –

+0

ハイハレハナット、私はあなたのサンプルを実行し、結果は私の結果です。値 'b'は2行(1行目と4行目)に表示されます。それでもデータは重複しています。 –

関連する問題