用户ID 姓名 年龄
-------------------
111 张三 26
222 李四 25
333 王五 30
111 张三 26
这里有两个张三,我想把重复的姓名去掉,这条SQL语句如何写?我用distinct怎么做都不行啊!
select disinct id,name,age from xxx
select disinct(name),id,age from xxx
类似以上两条都不行~~
16 个解决方案
#1
select distinct 用户ID , 姓名 , 年龄 from t
#2
用户ID 姓名 年龄
----------- ---------- -----------
111 张三 26
222 李四 25
333 王五 30
(所影响的行数为 3 行)
#3
create table #
(用户ID int, 姓名 varchar(10), 年龄 int)
insert into #
select 111, '张三', 26 union all
select 222, '李四', 25 union all
select 333, '王五', 30 union all
select 111, '张三', 26
select distinct * from #
/*
用户ID 姓名 年龄
----------- ---------- -----------
111 张三 26
222 李四 25
333 王五 30
(所影响的行数为 3 行)
*/
#4
select disinct id,name,age from xxx
----------------
只要你的表的两条是完全重复的,就一定可以去掉其中的几条.如果不能的话,检查下某个字段值是不是有空格
----------------
只要你的表的两条是完全重复的,就一定可以去掉其中的几条.如果不能的话,检查下某个字段值是不是有空格
#5
晕了,我的问题没说清楚,忽略了一个重要的信息,就是相同姓名的记录还有其他字段的值却是不一样的,也就是说每条相同姓名的记录并不完全相同。。。。各位高手,不好意思,问题说错了,我该怎么办啊?
#6
假设的表应该是这样的:
用户ID 姓名 年龄 购买产品 购买日期
------------------------------------------------------
111 张三 26 手机 2007-10-1
222 李四 25 MP3 2007-10-22
333 王五 30 MP3 2006-11-2
111 张三 26 电脑 2007-12-6
我只想查出姓名不重复的记录,却要查询所有字段。当然,这个表只是假设,不存在合不合理的讨论。
用户ID 姓名 年龄 购买产品 购买日期
------------------------------------------------------
111 张三 26 手机 2007-10-1
222 李四 25 MP3 2007-10-22
333 王五 30 MP3 2006-11-2
111 张三 26 电脑 2007-12-6
我只想查出姓名不重复的记录,却要查询所有字段。当然,这个表只是假设,不存在合不合理的讨论。
#7
我比楼主更晕,上面的记录张三两条,想要哪条
#8
--当两条重,取日期大的一条
select * from t a
where not exists (select 1 from t where a.用户ID=用户ID a.姓名=姓名 and 购买日期>a.购买日期)
#9
谢谢鶴嘯九天~~,像你的查询条件,假如不同产品的购买日期是相同的呢?
事实上,对于姓名相同的记录,我只需要要任意一条,无须考虑任何情况啊。
不知道你还能不能再挑战一下自己?谢谢啊!
事实上,对于姓名相同的记录,我只需要要任意一条,无须考虑任何情况啊。
不知道你还能不能再挑战一下自己?谢谢啊!
#10
不知道你还能不能再挑战一下自己?
--------------------
呵呵,楼主好会说话.这个表每一个字段都有重复的可能吗?有没有唯一字段呢,如果表中字段好多的话
不可能写好多对比条件.只有加上个自动编号,来唯一区分它们
--------------------
呵呵,楼主好会说话.这个表每一个字段都有重复的可能吗?有没有唯一字段呢,如果表中字段好多的话
不可能写好多对比条件.只有加上个自动编号,来唯一区分它们
#11
对,表中好多字段,而且表结构我不能随意更改。有一个主键ID是确保不重复的,其他的哪个字段会重复哪个不会,都很难预料,但姓名一定会有重复,而所需要查询显示的信息,姓名却又不能重复出现,其他字段则根据姓名对应的来显示,排除掉的无需显示。
其实我已有预案,就是查询所有记录出来,在迭代显示记录集的过程中进行与上一条的对比,只要姓名与上一条相同则不显示。但我经常要遇到这种情况,实在想知道到底能否用一条语句查询出来。也许本身就无法实现,或者没人会去这样要求查询。
再次谢谢您!
其实我已有预案,就是查询所有记录出来,在迭代显示记录集的过程中进行与上一条的对比,只要姓名与上一条相同则不显示。但我经常要遇到这种情况,实在想知道到底能否用一条语句查询出来。也许本身就无法实现,或者没人会去这样要求查询。
再次谢谢您!
#12
有个id 就好
select * from t a
where not exists (select 1 from t where a.用户ID=用户ID a.姓名=姓名 and id>a.id)
--这样就可以把这个表所有重复的记录去掉了,写法很多,用 exists 执行效高
#13
一看就觉得靠谱,一试就真的行了耶~~你那颗红星真帅!
总算了却心结,非常感谢啊!!@>>-------
总算了却心结,非常感谢啊!!@>>-------
#14
帮顶,学习,再学习~~
#15
一切都是日期 影响的
#16
看明白了 所有,感激LZ 和 fa_ge 也解决了我的一个大问题
#1
select distinct 用户ID , 姓名 , 年龄 from t
#2
用户ID 姓名 年龄
----------- ---------- -----------
111 张三 26
222 李四 25
333 王五 30
(所影响的行数为 3 行)
#3
create table #
(用户ID int, 姓名 varchar(10), 年龄 int)
insert into #
select 111, '张三', 26 union all
select 222, '李四', 25 union all
select 333, '王五', 30 union all
select 111, '张三', 26
select distinct * from #
/*
用户ID 姓名 年龄
----------- ---------- -----------
111 张三 26
222 李四 25
333 王五 30
(所影响的行数为 3 行)
*/
#4
select disinct id,name,age from xxx
----------------
只要你的表的两条是完全重复的,就一定可以去掉其中的几条.如果不能的话,检查下某个字段值是不是有空格
----------------
只要你的表的两条是完全重复的,就一定可以去掉其中的几条.如果不能的话,检查下某个字段值是不是有空格
#5
晕了,我的问题没说清楚,忽略了一个重要的信息,就是相同姓名的记录还有其他字段的值却是不一样的,也就是说每条相同姓名的记录并不完全相同。。。。各位高手,不好意思,问题说错了,我该怎么办啊?
#6
假设的表应该是这样的:
用户ID 姓名 年龄 购买产品 购买日期
------------------------------------------------------
111 张三 26 手机 2007-10-1
222 李四 25 MP3 2007-10-22
333 王五 30 MP3 2006-11-2
111 张三 26 电脑 2007-12-6
我只想查出姓名不重复的记录,却要查询所有字段。当然,这个表只是假设,不存在合不合理的讨论。
用户ID 姓名 年龄 购买产品 购买日期
------------------------------------------------------
111 张三 26 手机 2007-10-1
222 李四 25 MP3 2007-10-22
333 王五 30 MP3 2006-11-2
111 张三 26 电脑 2007-12-6
我只想查出姓名不重复的记录,却要查询所有字段。当然,这个表只是假设,不存在合不合理的讨论。
#7
我比楼主更晕,上面的记录张三两条,想要哪条
#8
--当两条重,取日期大的一条
select * from t a
where not exists (select 1 from t where a.用户ID=用户ID a.姓名=姓名 and 购买日期>a.购买日期)
#9
谢谢鶴嘯九天~~,像你的查询条件,假如不同产品的购买日期是相同的呢?
事实上,对于姓名相同的记录,我只需要要任意一条,无须考虑任何情况啊。
不知道你还能不能再挑战一下自己?谢谢啊!
事实上,对于姓名相同的记录,我只需要要任意一条,无须考虑任何情况啊。
不知道你还能不能再挑战一下自己?谢谢啊!
#10
不知道你还能不能再挑战一下自己?
--------------------
呵呵,楼主好会说话.这个表每一个字段都有重复的可能吗?有没有唯一字段呢,如果表中字段好多的话
不可能写好多对比条件.只有加上个自动编号,来唯一区分它们
--------------------
呵呵,楼主好会说话.这个表每一个字段都有重复的可能吗?有没有唯一字段呢,如果表中字段好多的话
不可能写好多对比条件.只有加上个自动编号,来唯一区分它们
#11
对,表中好多字段,而且表结构我不能随意更改。有一个主键ID是确保不重复的,其他的哪个字段会重复哪个不会,都很难预料,但姓名一定会有重复,而所需要查询显示的信息,姓名却又不能重复出现,其他字段则根据姓名对应的来显示,排除掉的无需显示。
其实我已有预案,就是查询所有记录出来,在迭代显示记录集的过程中进行与上一条的对比,只要姓名与上一条相同则不显示。但我经常要遇到这种情况,实在想知道到底能否用一条语句查询出来。也许本身就无法实现,或者没人会去这样要求查询。
再次谢谢您!
其实我已有预案,就是查询所有记录出来,在迭代显示记录集的过程中进行与上一条的对比,只要姓名与上一条相同则不显示。但我经常要遇到这种情况,实在想知道到底能否用一条语句查询出来。也许本身就无法实现,或者没人会去这样要求查询。
再次谢谢您!
#12
有个id 就好
select * from t a
where not exists (select 1 from t where a.用户ID=用户ID a.姓名=姓名 and id>a.id)
--这样就可以把这个表所有重复的记录去掉了,写法很多,用 exists 执行效高
#13
一看就觉得靠谱,一试就真的行了耶~~你那颗红星真帅!
总算了却心结,非常感谢啊!!@>>-------
总算了却心结,非常感谢啊!!@>>-------
#14
帮顶,学习,再学习~~
#15
一切都是日期 影响的
#16
看明白了 所有,感激LZ 和 fa_ge 也解决了我的一个大问题