高分悬赏! SQL去除重复项!

美福种田伯 2007-07-08 07:07:20
如下表:
ID1 ID2
15 17
15 18
16 19

我想通过查询获得如下结果:
ID1 ID2
15 17
16 19

DISTINCT函数只能包含相同的字段,但我想查询出不相同的ID1和ID2。
...全文
2511 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
echiynn 2007-07-10
  • 打赏
  • 举报
回复
如果表不止2列的話,binglengdexin2() 的方法就行不通了

所以還是hellowork(一两清风) 的方法更通用,呵呵
liangpei2008 2007-07-10
  • 打赏
  • 举报
回复
binglengdexin2
牛!!:)
liaoenne 2007-07-10
  • 打赏
  • 举报
回复
hellowork(一两清风):
select * from @t as a where not exists(select 1 from @t where ID1 = a.ID1 and ID2 < a.ID2)
这句话意思看不懂,不知能否给解释一下,谢谢。
ojuju10 2007-07-10
  • 打赏
  • 举报
回复

select * from tbl a
where not exists(select 1 from tbl where a.id1=id1 and a.id2>id2 )
  • 打赏
  • 举报
回复
多多益善啊,如果对ID2没有要求的话,还是选择使用MIN和MAX函数性能好一些!
binglengdexin2 2007-07-10
  • 打赏
  • 举报
回复
我初学SQL,几个星期而已,我只是看题目就写..
w75251455 2007-07-10
  • 打赏
  • 举报
回复
liangpei2008(笑青天) ( ) 信誉:100 Blog 加为好友 2007-07-10 12:20:30 得分: 0


binglengdexin2
牛!!:)


蝶恋花雨 2007-07-10
  • 打赏
  • 举报
回复
学习数据库来高手真多
hellowork 2007-07-09
  • 打赏
  • 举报
回复
没有区别,习惯写法.
aspirationTT 2007-07-09
  • 打赏
  • 举报
回复
----方法1:
select * from @t as a where not exists(select 1 from @t where ID1 = a.ID1 and ID2 < a.ID2)
这句里面的子查询select 1 from @t where ID1 = a.ID1 and ID2 < a.ID2中
为什么写成select 1 而不写成select * 呢?这个有什么区别
aspirationTT 2007-07-09
  • 打赏
  • 举报
回复
hellowork(一两清风)考虑得比较周全
高手真多啊
sp4 2007-07-09
  • 打赏
  • 举报
回复
hellowork(一两清风) 的方法最好,

binglengdexin2() 的虽然省事,但是在很多情况下不适用
ice241018 2007-07-09
  • 打赏
  • 举报
回复
up
hellowork 2007-07-09
  • 打赏
  • 举报
回复
因为楼主没有具体说明是求ID2的最小值还是求ID2最小值所在的行,所以就假设楼主要求的每个ID1相同的ID2最小的那一行了.虽然本题中求最小值和最小值所在的行的结果相同,但含义却大相径庭,这样写可能相对于楼主的简单需求来说是多虑了.
zjcxc 元老 2007-07-09
  • 打赏
  • 举报
回复
binglengdexin2() 的方法省事.

hellowork(一两清风) 为什么要考虑子查询之类呢?
binglengdexin2 2007-07-08
  • 打赏
  • 举报
回复
create table test(id1 int,id2 int)
insert test select 15,17
union all select 15,18
union all select 16,19



select id1,min(id2) id2 from test group by id1

drop table test

/----------------------/结果
15 17
16 19
xiaoleige00 2007-07-08
  • 打赏
  • 举报
回复
新建的SQL群 19078538 欢迎大家加入,共同研究,一起进步!
hellowork 2007-07-08
  • 打赏
  • 举报
回复
declare @t table(ID1 int,ID2 int)
insert @t
select 15, 17 union all
select 15, 18 union all
select 16, 19

----方法1:
select * from @t as a where not exists(select 1 from @t where ID1 = a.ID1 and ID2 < a.ID2)
----方法2:
select * from @t as a where ID2 = (select min(ID2) from @t where ID1 = a.ID1)
----方法3:
select a.* from @t as a
INNER JOIN (select ID1, min(ID2) as ID2 from @t group by ID1) as b
on a.ID1 = b.ID1 and a.ID2 = b.ID2


/*结果:
ID1 ID2
----------- -----------
15 17
16 19
*/
hellowork 2007-07-08
  • 打赏
  • 举报
回复
declare @t table(ID1 int,ID2 int)
insert @t
select 15, 17 union all
select 15, 18 union all
select 16, 19

select * from @t as a where not exists(select 1 from @t where ID1 = a.ID1 and ID2 < a.ID2)

/*结果:
ID1 ID2
----------- -----------
15 17
16 19
*/

34,596

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧