以下5001(参数s_id)是动态调用的。这是不起作用的,不返回任何行从学生表。什么是这个问题的根本原因?#
select * from student where
( ( 1 = CASE WHEN to_char('5001') = to_char(0) THEN
1
ELSE
0
END )
OR student.roll_id IN ( 5001 ) );
1条答案
按热度按时间3df52oht1#
假设表中至少有一行-如果没有ROLL_ID = 5001(数字)的行,并且参数s_id的值从不为0(数字零),则where子句将不选择行。如果存在ROLL_ID = 5001的行,则将选择该行,如果参数s_id为0(数字零),则将选择所有行...
只是稍微构建了一下SQL(它和以前一样)
测试1:存在ROLL_ID = 5001的行
测试2:相同代码-使用新样本数据,其中不存在ROLL_ID = 5001的行
测试3:样本数据仍然没有ROLL_ID = 5001但param s_id = 0的行
测试3将选择所有行-始终