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

解决方案 »

  1.   

    distinct 是可以的,但distinct应该是列的并。
    select distinct (ProgName+Actor+wherefrom+note), id, ProgName, Actor,wherefrom,note
      

  2.   

    试了下,使用如下语句select distinct progname,actor,wherefrom from movie
    得到结果
    ProgName,      Actor,wherefrom 
    黑夜传说 ,       凯特,   欧美 
    黑夜传说-进化,   凯特,   欧美 
    功夫 ,          周星驰, 香港
    但是要加上楼主前面的id,还请高手指点哈..
    根据楼主的需求,得到第一条记录id可以为(1,2)中的任意一条,第二条记录id可以为(3,4,5)中任意一个,第三条记录id则为6,
    仿佛结果不定啊....等高手来解答。
      

  3.   

    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)
      

  4.   

    感觉只有id是唯一的,表中其他项都是依赖该字段,并不依赖于progname。
    若要通过progname来筛选,则不应该将主码列在筛选的结果集中。不知道是不是这样讲?
      

  5.   

    觉得楼主表设计可以重新改下。增加一个电影名编号字段movieID,id自增仍为主键。id, movieID   ProgName,    Actor,wherefrom,note 
    1 , mv00001   黑夜传说 ,     凯特 , 欧美 ,   上集 
    2 , mv00001   黑夜传说 ,     凯特 , 欧美 ,   下集 
    3 , mv00002   黑夜传说-进化 , 凯特 , 欧美 ,   第一集 
    4 , mv00002   黑夜传说-进化 , 凯特 , 欧美 ,  第二集 
    5 , mv00002   黑夜传说-进化 , 凯特 , 欧美 ,  第三集 
    6 , mv00004   功夫 ,        周星驰 ,香港 ,   全 查询结果:
    mv00001   黑夜传说 ,     凯特 , 欧美
    mv00002   黑夜传说-进化 , 凯特 , 欧美
    mv00004   功夫 ,        周星驰 ,香港感觉这样处理会更好。
      

  6.   


    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)
      

  7.   

    @lynmison 
    我用的是mysql 5.0 ,报错
    @jzinfo
    如果发现ProgName有重复,SQL会选第一条吧
    表结构已经定了,id是自动编号
    @liangpei2008 
    谢谢你!
    显示行 0 - 2 (3 总计, 查询花费 0.0233 秒)
    SQL 查询:
    [code]
    SELECT * 
    FROM movie A
    WHERE NOT 
    EXISTS (SELECT 1 
    FROM movie
    WHERE A.ProgName = ProgName
    AND id < A.id
    [/code]
    结果:
      id  ProgName  Actor  wherefrom  Note  
          1 黑夜传说 凯特 欧美 上集 
          3 黑夜传说-进化 凯特 欧美 第一集 
          6 功夫 周星驰 香港 全 
      

  8.   

    select * from film where id in(select min (id) from film group by ProgName )结果如下
    id,   ProgName,   Actor,wherefrom 
    1   ,   黑夜传说   ,   凯特   ,   欧美 
    3   ,   黑夜传说-进化   ,   凯特   ,   欧美 
    6   ,   功夫   ,   周星驰   ,   香港