select case when A.PARENTKEY is null then A1.name else A2.name end ,B.high,B.weight ....
还是没理解楼主的意思…… 就是left join的概念吧? select a.* ,b.weight,b.height from a left join b on a.name = b.name
谢谢各位的回复,现在结果是这样 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 好像没出来?
总算理解你的意思了…… 用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
假设只有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;
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null, 可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤? 实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把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
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把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?
家里没电脑,我去学学case when,明天试一下!先谢谢了
查询如图,mysql版本是5.5.17
就是left join的概念吧?
select a.* ,b.weight,b.height from a left join b on a.name = b.name
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 好像没出来?
用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
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;
查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null,
可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤?
实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name
查询结果把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
查询结果把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?
其实right join 和left join一样,只是两张表位置先后关系而已。我习惯使用left join,这样比较符合阅读习惯。
一般都是from 主要的表,left join附属表。
以你要的结果,from b表,left join a表就可以了。