题目:一张表里面有三个属性:主键自增ID,父级PID,自己名字NAME,要求以自己的方式查出来。要求如下:
表里内容:
ID PID NAME
1 0 张三
2 1 李四
3 1 王五
4 2 赵六
题目要求显示结果:
ID NAME PNAME(父节点姓名)
1 张三 NULL
2 李四 张三
3 王五 张三
4 赵六 李四
通过传参差一个:
select nickname,pdate,
(select nickname from qrtable where openid in
(
select popenid from qrtable where openid='oj2ya0-OSplH0Vf4CArgtzEFTnf4'
) ) as pnickname
from qrtable
where openid='oj2ya0-OSplH0Vf4CArgtzEFTnf4';
不通过传参查询所有:
通过自己定义的格式将所有的显示出来的方式有两种:
1.左连接:
SELECT e.`openid`,e.`nickname`,l.`nickname` FROM qrtable e LEFT JOIN qrtable l
ON e.`popenid`=l.`openid`;
2.
select a.id,
a.name,
case
b.name
when
a.name then 'None'
else
b.name end as pname
from chuan as a join chuan as b on a.pid = b.id OR a.pid=0 GROUP BY a.id;
case
when
else
from chuan as a join chuan as b on a.pid = b.id OR a.pid=0 GROUP BY a.id;
题目要求:
查询名字、他的子节点个数、二级节点个数
SELECT e.`nickname`,COUNT(e.openid= l.popenid) number1 ,(SELECT COUNT(*) FROM qrtable WHERE popenid=l.openid )number2 FROM
qrtable e LEFT JOIN qrtable l
ON e.openid = l.popenid where e.pdate between '2015-10-01' and '2017-08-01'
group by e.`nickname` ;
qrtable e LEFT JOIN qrtable l
ON e.openid = l.popenid where e.pdate between '2015-10-01' and '2017-08-01'
group by e.`nickname` ;