国产数据库-达梦数据库sql语句中if、case when条件的使用,国产数据库(达梦数据库)case when sql语法和mysql有点不一样的地方,看了你也会
创始人
2025-01-15 19:08:32
0

1. if表达式的使用,在mysql中使用if 表达式

1.1  在where条件中使用if表达式

if (字段 = 1, {条件为true执行的结果}, {添加为false执行的结果})

-- 1. success!!  mysql if 表达式的使用,在where条件中使用if表达式 SELECT 	count(*) FROM 	noti_notification n WHERE 	1 = 1 	AND (n.creator_id = '856187440439296' OR (n.id IN ( 11, 22))) 	AND  		IF(response_type = 1, 			actual_total_user != (SELECT count(*) FROM noti_visit_log WHERE notification_id = n.id), 			actual_total_user != (SELECT count(*) FROM noti_reply WHERE notification_id = n.id) 		) 	AND n.tenant_id = 810192326787072 	AND n.type = 1;    

1.2. 在where条件中使用if表达式,以及在查询结果中使用if表达式 

if (字段 = 1, {条件为true执行的结果}, {添加为false执行的结果})

  -- 2. success!!  mysql if 表达式的使用,在where条件中使用if表达式,以及在 查询结果中使用if表达式    select if(pi.type_key ='1', 'a', 'b') as type_key, pi.* from BUS_DATA_CENTER.tc_project_info pi;                select if(pi.type_key ='1', 'a', 'b') as type_key, pi.* from BUS_DATA_CENTER.tc_project_info pi where 1=1       and if (pi.TYPE_KEY = '1', pi.JURISDICTION_KEY = '1', pi.JURISDICTION_KEY = '0');               

上面的两种 if表达式的使用在mysql数据库,以及国产达梦数据库都是能正常执行的,没有报错。

这也不是我们今天说的关键点。继续往下看。

2. case表达式的使用,在mysql中使用case when 表达式

2.1. 在where条件查询中使用case when 表达式
 -- 2.1. success!!  mysql case when 表达式的使用 SELECT 	count(*) FROM 	noti_notification n WHERE 	1 = 1 	AND (n.creator_id = '856187440439296' OR (n.id IN ( 11, 22))) 	AND  		CASE WHEN response_type = 1  			THEN actual_total_user != (SELECT count(*) FROM noti_visit_log WHERE notification_id = n.id) 			ELSE actual_total_user != (SELECT count(*) FROM noti_reply WHERE notification_id = n.id ) 		END 	AND n.tenant_id = 810192326787072 	AND n.type = 1;  
2.2. 在where条件查询中使用case when 表达式

2.2 和上面的 2.1 还是有些区别的。请注意观察  actual_total_user  != 是写在外面。

-- 2.2. success!!  mysql case when 表达式的使用 SELECT 	count(*) FROM 	noti_notification n WHERE 	1 = 1 	AND (n.creator_id = '856187440439296' OR (n.id IN ( 11, 22)))	  	AND actual_total_user != (                 select CASE WHEN response_type = 1 THEN ( SELECT count(*) FROM noti_visit_log WHERE notification_id = n.id)                 ELSE (SELECT count(*) FROM noti_reply WHERE notification_id = n.id) END 	)		  	AND n.tenant_id = 810192326787072 	AND n.type = 1; 

上面的两种 case when 表达式的使用在mysql数据库 都成功了。

但是问题就出现在  国产达梦数据库 上执行就有问题了,2.1 是成功的, 2.2 失败了。

我们直接看2.2 执行失败的错误提示信息:

刚开始,我以为是 != 使用报错导致,后来就改成  <> 替换 !=, 但是还是发现有报错。

看来还是这种case when的写法 国产数据库不支持吧。

问题来了,那怎么修改呢 ?!

问题来了,那怎么修改呢 ?!

问题来了,那怎么修改呢 ?!

... ...

那就换一种写法,改用上面的 2.1的写法就可以了。

总结下:

在国产达梦数据库中,使用下面的 case when语句的时候出现报错的问题。sql语法不支持的问题。 参看下表的不同写法:

sql语句 mysql数据库国产-达梦数据库

 

select * from DCM_DB.noti_notification n where 1=1  and IF(response_type = 2, 			n.actual_total_user = (SELECT count(*) FROM DCM_DB.noti_visit_log WHERE notification_id = n.id), 			n.actual_total_user = (SELECT count(*) FROM DCM_DB.noti_reply WHERE notification_id = n.id) 		) and 2=2;

成功成功

 

select * from DCM_DB.noti_notification n where 1=1  and  	case  		when n.response_type = 2 then actual_total_user = (SELECT count(*) FROM DCM_DB.noti_visit_log WHERE notification_id = n.id) 		else actual_total_user = (SELECT count(*) FROM DCM_DB.noti_reply WHERE notification_id = n.id) 	end and 2=2;

 

达梦数据库下执行失败的错误提示:

成功

失败

国产数据库下执行识别,改用下面的写法就可以了

 

  select * from table_a  t  where 1=1  and  	IF(response_type = 1, 			actual_total_user != (SELECT count(*) FROM noti_visit_log WHERE notification_id = n.id), 			actual_total_user != (SELECT count(*) FROM noti_reply WHERE notification_id = n.id) 		) and 2=2		 ;

成功成功

这就是今天想说的,国产数据库执行sql,sql语法不支持的问题,如何修改。

相关内容

热门资讯

第4分钟了解!游戏挂机辅助软件... 第4分钟了解!游戏挂机辅助软件,皮皮广东游戏辅助软件,绝活教程(今日头条)-哔哩哔哩1、玩家可以在皮...
5分钟了解!琼崖海南麻将辅助器... 5分钟了解!琼崖海南麻将辅助器,小程序跑得快的辅助,积累教程(了解有挂)-哔哩哔哩1、下载好小程序跑...
一分钟了解!德州扑克游戏辅助器... 一分钟了解!德州扑克游戏辅助器,同城上饶辅助,资料教程(竟然有挂)-哔哩哔哩1、德州扑克游戏辅助器脚...
四分钟了解!腾微填大坑辅助,情... 四分钟了解!腾微填大坑辅助,情怀怎么开挂,教材教程(有挂细节)-哔哩哔哩1、让任何用户在无需腾微填大...
七分钟了解!小闲南川手游辅助器... 七分钟了解!小闲南川手游辅助器,新蜜瓜大厅破解,窍要教程(有挂秘诀)-哔哩哔哩1、很好的工具软件,可...
第2分钟了解!丫丫辅助器,福建... 第2分钟了解!丫丫辅助器,福建开心王国辅助,烘培教程(有挂方法)-哔哩哔哩1、实时福建开心王国辅助透...
7分钟了解!上品游戏辅助,决战... 7分钟了解!上品游戏辅助,决战加血辅助,秘籍教程(确实有挂)-哔哩哔哩1、玩家可以在上品游戏辅助线上...
第四分钟了解!微乐游戏公众号辅... 第四分钟了解!微乐游戏公众号辅助器,宝宝浙江辅助,模块教程(有挂分享)-哔哩哔哩1、打开软件启动之后...
第6分钟了解!鸿狐拼十辅助,微... 第6分钟了解!鸿狐拼十辅助,微信闲来辅助神器免费,窍要教程(证实有挂)-哔哩哔哩进入游戏-大厅左侧-...
近年来!wepoker怎么挂底... 近年来!wepoker怎么挂底牌(透视)辅助平台(确实有挂)-哔哩哔哩1、实时wepoker怎么挂底...