表:
tbl(dataid,value)
逻辑:
如果dataid点001 对应的 vaule存在,则取 该value,如果dataid点001不存则用dataid点002 对应的value,这样个有什么好的办法吗,在一个sql里面实现?

解决方案 »

  1.   

    select * from tbl where dataid=(
    select min(dataid)
    from tbl 
    where  dataid>=1)
      

  2.   

    select *
    from tb1
    where dataid='001' or dataid='002'
    order by dataid
    limit 1
      

  3.   

    select * from tbl where dataid=(
    select min(dataid)
    from tbl 
    where  dataid>=1)采用这个好些
      

  4.   

    楼上,
    select *
    from tb1
    where dataid='001' or dataid='002'
    order by dataid
    limit 1如果要在三个dataid 里面取值,直接用order by好像是不行的,
    例如
    001
    002
    003
    我要先判断002 是否存在,如果不存在就在判断 003,如 003 还不存在则就判断 001,
    我的意思是说dataid可能不能按照order by来排序的
      

  5.   

    还有这样情况
    例如
    tb1(id)
    1
    2
    3tba2(id,dataid,value)
    1,'001',1
    1,'002',2
    2,'001',1
    2,'002',2
    3,'001',1
    3,'002',2现在用 tb1 join tb2 on tb1.id=tb2.id
    这时候用order by limit 就没有用,
      

  6.   

    可能我开始表述有问题,实际上是要实现 刚刚 上面那情况,
    例如
    tb1(id)
    1
    2
    3tba2(id,dataid,value)
    1,'001',1
    1,'002',2
    2,'001',1
    2,'002',2
    3,'001',1
    3,'002',2要先判断在 Id相同的情况下,先判断 001 是否存在,不存在 就继续判断 002
      

  7.   

    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分....
      

  8.   


    select b.*
    from tb1 a
    join tb2 b on a.Id=b.Id and b.dataid in('001','002')
    group by a.Id