обновить дубликат записи - PullRequest
1 голос
/ 10 ноября 2009

У меня есть таблица со следующими полями

Id Name IsPublic

Мне нужно написать SQL-запрос, который обновляет IsPublic до false, где имя имеет дубликат. Только один из дубликатов должен иметь IsPublic = true.

IsPublic по умолчанию имеет значение

Ответы [ 4 ]

2 голосов
/ 10 ноября 2009

Я предлагаю выборочный подход:

update tableName t1
   set IsPublic = false
 where exists(select ID 
                from tableName t2 
               where t1.name = t2.name 
                 and t2.Id < t1.Id)

Чтобы гарантировать, что ровно один из дубликатов сохраняет свой IsPublic = true, я использую дополнительное условие where в дополнительном выборе: and t2.Id < t1.Id. Дубликат с наименьшим значением Id сохраняет IsPublic = true, в то время как для всех других записей с таким же именем IsPublic имеет значение false.

1 голос
/ 10 ноября 2009
update
  table
set
  isPublic = false
from
  table t
    inner join table t2 on (t.name = t2.name and t.id < t2.id)
where
  isPublic = true
0 голосов
/ 10 ноября 2009
declare @t table(Id int, Name varchar, IsPublic bit)
insert into @t(Id, Name) values(1, 'a')
insert into @t(Id, Name) values(2, 'b')
insert into @t(Id, Name) values(3, 'b')

update a
set IsPublic = isnull( (select 0 from @t b where a.Name = b.Name and a.id > b.id), 1)
from @t a

select * from @t

Неуникальная запись с минимальным идентификатором получает IsPublic = 1

0 голосов
/ 10 ноября 2009

Должно быть установлено значение isPublic равным false для всех дубликатов, сохраняющих элемент с идентификатором mininmun для каждой группы элементов с одинаковым значением для поля Имя:

UPDATE
    MyTable
SET 
    isPublic = false
WHERE   
    Id NOT IN
    (SELECT   
          MIN(Id)
     FROM 
          MyTable
     GROUP BY 
          Name 
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...