select a.x, b.y, c.z from a
join b on a.id = b.aId
left join c on b.id = c.bId;因为b表与c表是1对多的关系,所以数据存在重复,比如
x y z
1 2 a
1 2 b
1 3 c
1 3 d现在想x和y是唯一的,z无所谓,结果比如
x y z
1 2 a
1 3 c请问sql如何写啊,谢谢啦

解决方案 »

  1.   

    select x, y, min(z) as z
    from tb_name
    group by x, y;
      

  2.   


    如果要查的字段很多的话,都放在group by 后面吗?
      

  3.   

    如果要查的字段很多的话,都放在group by 后面吗?
    是其实方法很多
    select * 
    from tb_name a 
    where rowid = (select max(rowid) from tb_name b where b.x=a.x and b.y=a.y)
      

  4.   

    查的字段多少跟group by有什么关系啊,非要放在他的后面?不是只用按照需要分组的条件才跟着他的后面吗,查询的字段不放在它后面也可以吧
      

  5.   


    聚合函数或者可以这样 同老兵的方法类似
    SELECT a.x, b.y, c.z
      FROM a JOIN b ON a.ID = b.aid
           LEFT JOIN
           (SELECT *
              FROM c1
             WHERE ROWID IN (SELECT   MAX (ROWID)
                                 FROM c c2
                             GROUP BY ID)) c ON b.ID = c.bid
           ;
      

  6.   

    select x,y,z from (select a.x, b.y, c.z, row_number() over(partition by a.x,b.y order by c.z) rn from a
    join b on a.id = b.aId
    left join c on b.id = c.bId ) t where rn =1