English 中文(简体)
update duplicate record
原标题:

I have a table with the following fields

Id Name IsPublic

i need to write a sql query that updates IsPublic to false where name has a duplicate. Only one of the duplicates should have IsPublic = true.

IsPublic is true by default

最佳回答

I am suggesting a sub-select approach:

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

In order to ensure that exactly one of the duplicates keeps its IsPublic = true, I use an extra where clause in the sub-select: and t2.Id < t1.Id. The duplicate with the lowest Id value keeps IsPublic = true, while all other records with the same name have their IsPublic set to false.

问题回答
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

Should be setting isPublic to false for all the duplicates retaining the item with the mininmun ID for each group of items with the same value for the Name field:

UPDATE
    MyTable
SET 
    isPublic = false
WHERE   
    Id NOT IN
    (SELECT   
          MIN(Id)
     FROM 
          MyTable
     GROUP BY 
          Name 
    )
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

Non-unique record with min id gets IsPublic = 1





相关问题
How to write this T-SQL WHERE condition?

I ve got two tables: TableA Col1 Col2 TableB Col3 Col4 I want to join them together: SELECT * from TableA join TableB ON (...) Now, in place of ... I need to write an expression ...

Customer and Order Sql Statement

TSQL query to select all records from Customer that has an Order and also select all records from customer that does not have an Order. The table Customer contains a primary key of CustomerID. The ...

Recommended way of querying multiple Versioned tables

Have a win 2003 box with MSSQL 2005 running on it. There is a database which is populated every morning with new/modified SalesOrder made the previous day. The database has several tables: SalesOrder, ...

update duplicate record

I have a table with the following fields Id Name IsPublic i need to write a sql query that updates IsPublic to false where name has a duplicate. Only one of the duplicates should have IsPublic = ...

Define variable to use with IN operator (T-SQL)

I have a Transact-SQL query that uses the IN operator. Something like this: select * from myTable where myColumn in (1,2,3,4) Is there a way to define a variable to hold the entire list "(1,2,3,4)"? ...

Selecting records during recursive stored procedure

I ve got a content management system that contains a hierarchical structure of categories, with sub-categories subject to different ordering options at each level. Currently, that s retrieved by a (...

热门标签