SQL distinct 去除重复数据 删除

1、distinct 去重

SELECT distinct * FROM StandardProduct

SELECT distinct(ID) FROM StandardProduct

SELECT distinct ID,StandardProductName FROM StandardProduct

SELECT * FROM RetailerProduct WHERE ID IN (SELECT Max(ID) from RetailerProduct GROUP BY StandardProductID)

2、删除表

drop table [表名称]

3、删除表数据

truncate table [表名称]

4、删除某个数据库中所有表

use [dbTest]
go

--删除数据库中所有表
declare @sql varchar(8000)
while (select count(*) from sysobjects where type='u') > 0
    begin
        select @sql='drop table ' + name from sysobjects where (type = 'u') order by 'drop table ' + name
        exec(@sql) 
    end
GO

--创建表
CREATE TABLE [dbo].[sys_user](
	[id] [int] NOT NULL,
	[name] [nvarchar](20) NOT NULL
) ON [PRIMARY]
GO

5、删除某个数据库中所有表的数据

--1、Delete
declare @sql  varchar(5000)
set @sql = ''
select @sql = @sql +'delete from  '+[name]+';' from sysobjects where xtype='u'
print  @sql
--exec(@sql)
go

--2、Turncate
declare @sql  varchar(5000)
set @sql = ''
select @sql = @sql +'truncate table '+[name]+';'  from sysobjects where xtype='u'
print  @sql
--exec(@sql)
go

--3、创建表
CREATE TABLE [dbo].[sys_user](
	[id] [int] NOT NULL,
	[name] [nvarchar](20) NOT NULL
) ON [PRIMARY]
GO

--4、插入数据
insert [dbo].[sys_user] ([id], [name]) values (1, N'1')
go
insert [dbo].[sys_user] ([id], [name]) values (2, N'2')
go
insert [dbo].[sys_user] ([id], [name]) values (3, N'3')
go

*
*
*

SQL Server 中删除重复数据通常通过聚集函数、自连接查询或使用内置的 `DISTINCT` 关键字结合 `DELETE` 或 `INSERT INTO ... SELECT DISTINCT` 来实现。以下是几种常见的方法: 1. **使用 `DISTINCT`**: 如果你想删除某个表中的所有重复行,可以先创建一个新的临时表,只包含唯一的数据,然后将这些行插入到原始表中。 ```sql INSERT INTO TableName DistinctColumn1, DistinctColumn2... SELECT DISTINCT Column1, Column2... FROM TableName; ``` 2. **使用 `DELETE` 和 `GROUP BY`**: 首先,找出重复的行,然后根据需要的唯一标识符删除非第一个出现的行。 ```sql DELETE T1 FROM TableName T1 INNER JOIN ( SELECT Column1, Column2, ROW_NUMBER() OVER(PARTITION BY Column1, Column2 ORDER BY (SELECT NULL)) AS RN FROM TableName ) T2 ON T1.Column1 = T2.Column1 AND T1.Column2 = T2.Column2 WHERE T2.RN > 1; ``` 3. **使用 `CTE`(公共表表达式)**: 可以通过递归的方式从原始表开始,逐步删除重复项。 ```sql WITH CTE recursive (ID, DupRows) AS ( SELECT ID, COUNT(*) OVER(PARTITION BY Column1, Column2) as DupRows FROM TableName UNION ALL SELECT t.ID, c.DupRows - 1 FROM TableName t JOIN CTE c ON t.Column1 = c.Column1 AND t.Column2 = c.Column2 WHERE c.DupRows > 1 ) DELETE FROM TableName WHERE ID IN (SELECT ID FROM CTE WHERE DupRows > 1); ``` 请注意,执行此类操作前务必备份数据,以防误删重要信息。同时,不同的场景可能需要调整上述示例以适应你的实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值