MySQL父查询和子查询

# 查询出所有比赵六入学晚的学生信息
# 子查询
select createDate from student where userName='赵六';
# 父查询
select
*
from student # 写注释非常方便
where
createDate>(
		select
		createDate
		from student
		where
		userName='赵六' # 子查询
);

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!感谢您的提问。对于如何通过MySQL查询所有节点,实现这个功能的方法有很多种,常用的方法有两种: 1. 使用递归查询 使用递归查询可以查询所有子节点,方法是使用“WITH RECURSIVE”关键字,该关键字可以从节点一直递归查询到所有子节点。示例SQL如下: WITH RECURSIVE cte(id, parent_id, name) AS ( SELECT id, parent_id, name FROM table_name WHERE parent_id IS NULL UNION ALL SELECT table_name.id, table_name.parent_id, table_name.name FROM table_name INNER JOIN cte ON cte.id=table_name.parent_id ) SELECT * FROM cte; 2. 使用存储过程 也可以使用存储过程实现查询所有节点的功能。这个方法需要先定义一个存储过程,然后在存储过程中使用游标循环查询。示例存储过程如下: DELIMITER // CREATE PROCEDURE GetAllNodes(IN parentId INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE id INT; DECLARE name VARCHAR(255); DECLARE cur CURSOR FOR SELECT id, name FROM table_name WHERE parent_id=parentId; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE; CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table(id INT, name VARCHAR(255)); OPEN cur; FETCH cur INTO id, name; WHILE NOT done DO INSERT INTO tmp_table(id, name) VALUES (id, name); CALL GetAllNodes(id); FETCH cur INTO id, name; END WHILE; CLOSE cur; SELECT * FROM tmp_table; END // DELIMITER ; 以上就是两种实现方法,您可以根据自己的需求选择其中一种。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值