select case when A.PARENTKEY is null then A1.name else A2.name ,B.high,B.weight
from A A1,A A2,B
where A1.PARENTKEY=A2.id and A1.name=B.name

解决方案 »

  1.   

    感谢版主回复
    家里没电脑,我去学学case when,明天试一下!先谢谢了
      

  2.   


    查询如图,mysql版本是5.5.17
      

  3.   

    我用实际表查询也是错误只是到这里,near在第二个表字段那里,一直忙别的事,刚才着手继续弄这个问题。。
      

  4.   

    select case when A.PARENTKEY is null then A1.name else A2.name end ,B.high,B.weight ....
      

  5.   

    还是没理解楼主的意思……
    就是left join的概念吧?
    select a.* ,b.weight,b.height from a left join b on a.name = b.name
      

  6.   

    谢谢各位的回复,现在结果是这样
    select case when a1.parentkey is null then a1.name else a2.name end, b.height,b.weight
    from a a1,a a2,b
    where a1.parentkey=a2.id and a1.name=b.name我想要的是
    name    height    weight
    ----------------------------------
    a            10           10
    b            20           20
    a            30           30else a2.name  好像没出来?
      

  7.   

    总算理解你的意思了……
    用left join应该可以select case when a2.id is null then a1.name else a2.name end,weight,height
    from a a1
    left join a a2
    on a1.parentkey = a2.id
    left join b
    on a1.name = b.name
      

  8.   

    假设只有1层
    SELECT 
    If(c.name Is Null,b.name,c.name) AS 表达式1, a.HEIGHT, a.WEIGHT
    FROM (a2 AS a LEFT JOIN a1 AS b ON a.NAME = b.NAME) LEFT JOIN a1 AS c ON b.PARENTKEY = c.ID;
      

  9.   

    再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。
    查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null,
    可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤?
    实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name
      

  10.   

    不知道是不是这么一个逻辑,好像是先遍历了a,然后去b里找;而有的a在b里是没有对应的,就不用显示了,不好意思这个点之前没说清楚
      

  11.   

    再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。
    查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null,
    可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤?
    实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name这个简单,连b表的时候改成inner joinselect case when a2.id is null then a1.name else a2.name end,weight,height
    from a a1
    left join a a2
    on a1.parentkey = a2.id
    inner join b
    on a1.name = b.name
      

  12.   

    再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。
    查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null,
    可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤?
    实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name这个简单,连b表的时候改成inner joinselect case when a2.id is null then a1.name else a2.name end,weight,height
    from a a1
    left join a a2
    on a1.parentkey = a2.id
    inner join b
    on a1.name = b.name

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行学习了真心感谢上面所有的朋友!
    继续学习ing……
    我想要的结果应该是全部列出b表信息,并在a表中找出对应的,且按照id,parentkey关系列出来,这么看是不是应该用right join更准确?不过也有可能异常删除或修改导致b表里有而a里没有的话如果查出a为null的话好像也不太对,所以保险起见就用inner?
      

  13.   

    个人不习惯使用right join
    其实right join 和left join一样,只是两张表位置先后关系而已。我习惯使用left join,这样比较符合阅读习惯。
    一般都是from 主要的表,left join附属表。
    以你要的结果,from b表,left join a表就可以了。