Write the sql for deleting duplicate rows from a table without using temporary space.
Anónimo
/* Step 1 Create Table*/ CREATETABLE [dbo].[AddressBook]( [ID] [int] NULL, [First Name][varchar](50)NULL, [Last Name] [varchar](50)NULL, [Address] [varchar](50)NULL )ON [PRIMARY] GO /* Step 2 Insert Test Data */ INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (1,'David','Dongan','4th Street') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (2,'Adam','Smith','Harvard Sq') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (3,'Anderson','Cooper', 'Atlanta, GA') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (4,'Christiane','Amanpour','Atlanta, GA') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (5,'David','Axelrod','Chicago, IL') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (6,'Christiane','Amanpour','Atlanta, GA') INSERTINTO [Test].[dbo].[AddressBook]([ID],[First Name],[Last Name],[Address])VALUES (7,'Adam','Smith','Harvard Sq') Go /* Step 3 View Records, includes 2 duplicate records */ Select*from [dbo].[AddressBook] /* Step 4 Test SQL:Remove duplicates rows*/ /* Logic: Assuming no nulls, GROUP BY the unique columns, and SELECT the MIN (or MAX) RowId as the row to keep. Then, just delete rows that do not have a row id. */ DELETE [Test].[dbo].[AddressBook] FROM [Test].[dbo].[AddressBook] LEFTOUTERJOIN(SELECTMIN([ID])as [ID] ,[First Name] ,[Last Name] ,[Address] FROM [Test].[dbo].[AddressBook] GROUPBY [First Name] ,[Last Name] ,[Address] )as KeepRows ON [Test].[dbo].[AddressBook].[ID] = KeepRows.[ID] WHERE KeepRows.[ID] ISNULL /* Step 5 View Records again, does not include any duplicates */ Select*from [Test].[dbo].[AddressBook] /* Step 6 Drop table */ IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[AddressBook]')ANDtypein(N'U')) DROPTABLE [dbo].[AddressBook] GO /* This is one solution */