2016-09-12 5 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) 

То, что я хочу, чтобы обновить все пустое значение в столбце Cl2 в tbl2 таблицы с не дублируют значения.

Я попытался запустить сценарий выше, но это не сработало правильно.

Пожалуйста, помогите мне найти решение.

Спасибо.

+0

Последний выбор предназначен для ввода данных в 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

hi haresh hanat, я запустил ваш образец, в результате получился результат. Значение «b» отображается в 2 строках (строки 1 и 4). Он все еще имеет повторяющиеся данные. –

Смежные вопросы