当前位置:首页 » 编程语言 » sql保留一行
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql保留一行

发布时间: 2022-09-08 08:06:49

⑴ 在sql中一张表中有重复的几行,怎么删掉重复的,但是只保留一行!

SQL Server 的处理办法

-- 首先创建测试表
CREATE TABLE test_delete(
name varchar(10),
value INT
);
go

-- 测试数据,其中 张三100 与 王五80 是完全一样的
INSERT INTO test_delete
SELECT '张三', 100
UNION ALL SELECT '张三', 100
UNION ALL SELECT '李四', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '赵六', 90
UNION ALL SELECT '赵六', 70
go

-- 首先查询一下, ROW_NUMBER 效果是否满足预期
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

no name value
----- ---------- -----------
1 李四 80
1 王五 80
2 王五 80
1 张三 100
2 张三 100
1 赵六 70
1 赵六 90

从结果上可以看到,如果有重复的,完全一样的话, no 是有大于1的。

-- 创建视图
CREATE VIEW tmp_view AS
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

-- 删除 视图中的 no 不等于 1 的数据。
1> DELETE FROM tmp_view WHERE no != 1
2> go

(2 行受影响)
1>
2> select * from test_delete;
3> go
name value
---------- -----------
张三 100
李四 80
王五 80
赵六 90
赵六 70

(5 行受影响)

结果看上去是满足预期的。

⑵ sql 如何使交叉相等的数保留一行

两种方法:

一种是用去重DISTINCT关键字,搜索的时候Select DISTINCT name 就好了,不推荐,效率太低
第二种是逻辑分析,重复实际上是重复连接了,多加下条件就好了,比如
select * from X t left join X tt on t.id < tt.id

⑶ SQL: 删除一个列中重复的数据,但保留一行。假设 表A的列B 有三个a ,要求删除2个,保留1个!!!

这个是SQL中distinct的典型用法:
1)从字面意思就可以了解到:
distinct [dis'tiŋkt] adj. 明显的;独特的;清楚的;有区别的
2)在SQL中用distinct来消除重复出现的字段值。
使得每个字段值只出现一次。

具体用法如下:
select distinct 字段名 from 表;
distinct 字段名 意思就是只显示一次该字段名
一般情况下和order by 结合使用,这样可以提高效率。

所以你这个问题的答案是:select distinct B from A;
希望我的回答能让您满意。

⑷ SQL Server 删除所有重复行数据,只保留一行记录,没有主键

里面有一个distinct,就是消除重复行的,如果你是想看的时候,重复的只留一行,而不是删除里面的数据的话,那么就是写selectdistinctidfrompersons或者selectidfrompersonsgroupbyid如果你是想删除表里面的相同行,那么就是deletefr

⑸ sql问题,(a,b),(b,a)类型的数据只保留一行

建议你这样试试看:

select distinct (case when v1 <= v2 then v1 else v2 end) as v1,(case when v1 <= v2 then v2 else v1 end) as v2 from 表名

测试效果:

⑹ sql语句删除重复数据,保留一行

delete from tab where ROWID IN (
SELECT ROWID FROM (SELECT RANK()OVER(PARTITION BY 重复字段 ORDER BY ROWID) t
FROM tab WHERE 重复字段 IN (select name1 from tab group by 重复字段 HAVING COUNT(重复字段)>1)) WHERE t>1);

⑺ sql删除重复数据且只保留一条

在你的查询sql里面将子查询的title改成id,外面用id in(),这样会得到去重后的数据导出insert语句,将表中数据备份删除,再将导出的sql执行一下即可,还有一种就是写删除sql,delete from table where id not in(select id from table group by title )。

⑻ SQL 如何删除重复记录重复记录只保留一行

----注意,执行前,一定先备份,执行后查看是否是你要的效果
----在这里按你的要求,只保留“EmpID,FDate,fdate1”相同的记录中,ID值最小的记录
DELETEEmpdiaoWHEREIDNOTIN(
SELECTMIN(id)ASID
FROMEmpdiao
GROUPBYEmpID,FDate,fdate1
)

⑼ SQL删除重复数据,只保留一行

在sql的使用中,我们总是碰到需要删除重复数据的情况,但是又不能全部删除完,必须要保留至少一个重复的数据。重复的记录根据两个字段 a2,a3 判断(实际使用中可以拓展为多个)

在上述的表中第三行和第四行重复,我们要选择一行删除,流程如下:

结果如下:

得到的结果如下:

|a1|a2|a3|
|---|---|
|3|2|2|
|4|2|2|
|6|2|2|
那么后面就很好办了:

3.选出要删除的值:

结果是保留a1最小的值,其他选项全部选出,
请注意 此时并不是将Select 改为delete就可以了,如果你直接这样子改的话,会报如下错误:

该错误提示你,不能先select出同一表中的某些值,再update这个表(在同一语句中)。所以要稍微修改一下。

结果如下:

|a1|a2|a3|
|---|---|
|1|1|1|
|2|1|2|
|3|2|2|
|5|3|3|

完毕

注:如果说不用保留一行数据的话那么就简单多了,只需要一个很简单的sql语句: