MySQL CASE WHEN NOT IN

在做LeetCode数据库608. 树节点时,使用CASE WHEN NOT IN时,遇到一个not in不生效的问题

表结构

CREATE TABLE `tb_tree` (
  `id` int(11) NOT NULL,
  `p_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

表数据

INSERT INTO `leetcode`.`tb_tree`(`id`, `p_id`) VALUES (1, NULL);
INSERT INTO `leetcode`.`tb_tree`(`id`, `p_id`) VALUES (2, 1);
INSERT INTO `leetcode`.`tb_tree`(`id`, `p_id`) VALUES (3, 1);
INSERT INTO `leetcode`.`tb_tree`(`id`, `p_id`) VALUES (4, 2);
INSERT INTO `leetcode`.`tb_tree`(`id`, `p_id`) VALUES (5, 2);

问题

写一个查询语句,输出所有节点的编号和节点的类型,并将结果按照节点编号排序;

SQL

SELECT
	t.id,
CASE
		
		WHEN ISNULL( t.p_id ) THEN
		'根节点' 
		WHEN t.id NOT IN ( SELECT a.p_id FROM tb_tree a ) THEN
		'叶子节点' ELSE '内部节点' 
	END '节点类型'	
FROM
	tb_tree t;

在这里插入图片描述

SELECT
	t.id,
CASE
		
		WHEN ISNULL( t.p_id ) THEN
		'根节点' 
		WHEN t.id IN ( SELECT a.p_id FROM tb_tree a ) THEN
		'内部节点' ELSE '叶子节点' 
	END type 
FROM
	tb_tree t;

在这里插入图片描述

已解决

SELECT
	t.id,
CASE
		
		WHEN ISNULL( t.p_id ) THEN
		'根节点' 
		WHEN t.id NOT IN ( SELECT a.p_id FROM tb_tree a WHERE p_id IS NOT NULL ) THEN
		'叶子节点' ELSE '内部节点' 
	END 
FROM
	tb_tree t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MySQL 中的 `CASE WHEN` 语句用于实现类似于条件语句(if-then-else)的功能,可以在查询中对字段的值进行判断并返回不同的结果。语法如下: ``` CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END ``` 其中,`condition1`, `condition2`, ... 分别表示需要判断的条件,`result1`, `result2`, ... 分别表示当条件成立时的结果,`ELSE result` 表示所有条件都不成立时的结果。 举个例子: ``` SELECT id, name, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END AS grade FROM students; ``` 上面的语句中,对学生的成绩进行了判断,将其分为 A、B 或 C 等级。 ### 回答2: MySQL中的CASE WHEN语句是一种非常有用的条件语句,用于根据给定的条件执行不同的操作。它通常用于SELECT语句的查询结果中或UPDATE语句的更新操作中。 CASE WHEN语句的基本语法如下: ``` CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END ``` 其中,condition1、condition2等是可以被评估为TRUE或FALSE的条件表达式,result1、result2等是条件满足时要返回的结果。 CASE WHEN语句的执行顺序是从上到下,一旦条件满足,就会执行对应的结果,并且立即退出CASE WHEN语句。 以下是一个示例: ``` SELECT name, score, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 80 THEN '良好' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS grade FROM students; ``` 这个例子中,根据学生的分数score,将其等级grade分为优秀、良好、及格和不及格四个等级,然后将结果显示在查询结果中。 CASE WHEN语句也可以嵌套使用,以实现更复杂的逻辑判断。可以使用AND、OR、NOT等逻辑操作符来组合条件表达式。 总结来说,MySQL中的CASE WHEN语句是一种非常灵活和强大的条件表达式,在查询和更新操作中可以根据不同的条件执行不同的操作,以满足实际需求。 ### 回答3: MySQLCASE WHEN语句是一种强大的条件表达式,它可以在查询中根据不同的条件进行分支判断并返回不同的结果。 CASE WHEN语句的基本语法如下: ``` CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE else_result END ``` 该语句首先根据给定条件逐个进行判断,一旦找到满足条件的分支,就会返回对应的结果。如果所有条件都不满足,则返回ELSE子句定义的else_result。 CASE WHEN语句可以支持多层嵌套,可以在WHEN子句中使用各种比较操作符(如等于、大于、小于等)和逻辑操作符(如AND、OR)进行条件的组合。 例如,假设有一个名为students的表,其中有字段name和score,我们可以使用CASE WHEN语句来根据不同的分数范围对学生进行评级: ``` SELECT name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 80 THEN '良好' WHEN score >= 70 THEN '中等' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS grade FROM students; ``` 上述查询将根据学生的分数范围返回相应的评级,并将结果命名为grade。 总之,MySQLCASE WHEN语句是一种强大的条件表达式,可以根据不同的条件进行分支判断,非常适合在查询中进行数据转换和逻辑判断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值