怎么查询不重复的记录

adriftcloud 2007-10-23 03:35:10
id, ProgName, Actor,wherefrom,note
1 , 黑夜传说 , 凯特 , 欧美 ,上集
2 , 黑夜传说 , 凯特 , 欧美 ,下集
3 , 黑夜传说-进化 , 凯特 , 欧美 ,第一集
4 , 黑夜传说-进化 , 凯特 , 欧美 ,第二集
5 , 黑夜传说-进化 , 凯特 , 欧美 ,第三集
6 , 功夫 , 周星驰 , 香港 ,全

怎么用sql查询结果为:
id, ProgName, Actor,wherefrom
1 , 黑夜传说 , 凯特 , 欧美
3 , 黑夜传说-进化 , 凯特 , 欧美
6 , 功夫 , 周星驰 , 香港
也就是说只根据ProgName来选择不重复记录,我试过select distinct不行

...全文
895 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyp282856 2008-02-19
  • 打赏
  • 举报
回复
select * from film where id in(select min (id) from film group by ProgName )

结果如下
id, ProgName, Actor,wherefrom
1 , 黑夜传说 , 凯特 , 欧美
3 , 黑夜传说-进化 , 凯特 , 欧美
6 , 功夫 , 周星驰 , 香港

adriftcloud 2007-10-24
  • 打赏
  • 举报
回复
@lynmison
我用的是mysql 5.0 ,报错
@jzinfo
如果发现ProgName有重复,SQL会选第一条吧
表结构已经定了,id是自动编号
@liangpei2008
谢谢你!
显示行 0 - 2 (3 总计, 查询花费 0.0233 秒)
SQL 查询:

SELECT *
FROM movie A
WHERE NOT
EXISTS (

SELECT 1
FROM movie
WHERE A.ProgName = ProgName
AND id < A.id

结果:
id ProgName Actor wherefrom Note
1 黑夜传说 凯特 欧美 上集
3 黑夜传说-进化 凯特 欧美 第一集
6 功夫 周星驰 香港 全
liangpei2008 2007-10-23
  • 打赏
  • 举报
回复

DECLARE @T TABLE(id INT,ProgName varchar(50),Actor varchar(50),wherefrom Varchar(50),note varchar(50))
INSERT @T SELECT 1,'黑夜传说' , '凯特' , '欧美' ,'上集'
UNION ALL SELECT 2 , '黑夜传说' , '凯特' , '欧美' ,'下集'
UNION ALL SELECT 3 , '黑夜传说-进化' , '凯特' , '欧美' ,'第一集'
UNION ALL SELECT 4 , '黑夜传说-进化' , '凯特' , '欧美' ,'第二集'
UNION ALL SELECT 5 , '黑夜传说-进化' , '凯特' , '欧美' ,'第三集'
UNION ALL SELECT 6 , '功夫' , '周星驰' , '香港' ,'全'

--TEST
SELECT *
FROM @T A
WHERE NOT EXISTS
( SELECT 1 FROM @T WHERE A.ProgName=ProgName and id<A.id)
jzinfo 2007-10-23
  • 打赏
  • 举报
回复
觉得楼主表设计可以重新改下。增加一个电影名编号字段movieID,id自增仍为主键。

id, movieID ProgName, Actor,wherefrom,note
1 , mv00001 黑夜传说 , 凯特 , 欧美 , 上集
2 , mv00001 黑夜传说 , 凯特 , 欧美 , 下集
3 , mv00002 黑夜传说-进化 , 凯特 , 欧美 , 第一集
4 , mv00002 黑夜传说-进化 , 凯特 , 欧美 , 第二集
5 , mv00002 黑夜传说-进化 , 凯特 , 欧美 , 第三集
6 , mv00004 功夫 , 周星驰 ,香港 , 全

查询结果:
mv00001 黑夜传说 , 凯特 , 欧美
mv00002 黑夜传说-进化 , 凯特 , 欧美
mv00004 功夫 , 周星驰 ,香港

感觉这样处理会更好。


jzinfo 2007-10-23
  • 打赏
  • 举报
回复
感觉只有id是唯一的,表中其他项都是依赖该字段,并不依赖于progname。
若要通过progname来筛选,则不应该将主码列在筛选的结果集中。

不知道是不是这样讲?
unilion 2007-10-23
  • 打赏
  • 举报
回复
select a.id, a.ProgName, a.Actor,a.wherefrom,a.note from table a
where a.id=(select max(b.id) from table b where a.ProgName=b.ProgName)
jzinfo 2007-10-23
  • 打赏
  • 举报
回复
试了下,使用如下语句

select distinct progname,actor,wherefrom from movie


得到结果

ProgName, Actor,wherefrom
黑夜传说 , 凯特, 欧美
黑夜传说-进化, 凯特, 欧美
功夫 , 周星驰, 香港


但是要加上楼主前面的id,还请高手指点哈..
根据楼主的需求,得到第一条记录id可以为(1,2)中的任意一条,第二条记录id可以为(3,4,5)中任意一个,第三条记录id则为6,
仿佛结果不定啊....

等高手来解答。


天行归来 2007-10-23
  • 打赏
  • 举报
回复
distinct 是可以的,但distinct应该是列的并。
select distinct (ProgName+Actor+wherefrom+note), id, ProgName, Actor,wherefrom,note
hsmserver 2007-10-23
  • 打赏
  • 举报
回复
distinct
openweb 2007-10-23
  • 打赏
  • 举报
回复
用Distinct

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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