Mysql if语句忽略第一个条件

标签 mysql sql mysql-workbench

我在 mysql 过程中有一个 if 语句,如下所示:

if myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like 
'%خواص%' or myQuery like '%عوارض%' then
set  EHSfour= b'1';
end if;

令我惊讶的是,我发现上面的 if 语句忽略了 myQuery,如 '%فف٠%'。它会检查其他条件,并在 myQuery 类似于 '%ğ׶ר׵%' 或 '%ففف%' 或 '%ففف%' 时设置 EHSfour = 1,但在 时则不会设置 EHSfour = 1 myQuery 类似于 '%فف׏%'

为什么 mysql 会这样工作?在什么情况下mysql可能会出现这样的错误?

mysql版本是5.7,我使用的是mysql workbench 6.3 CE。

更新: 在我的代码中我有:

if EHSfour = b'1' then
set myEHSkind = 4;

然后:

update new_tbl_health set EHS_kind = myEHSkind where ID = myID;

这是我的整个过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `fillEHSKind`()
BEGIN
declare myEHSkind int default 0;
declare EHSone,EHStwo,EHSthree,EHSfour bit;
declare myID int(11);
declare myQuery varchar(500);
declare v_finished integer default 0;
declare myCursor cursor for select ID,Query from new_tbl_health;
declare continue handler for not found set v_finished = 1;
open myCursor;
myLoop: loop
fetch myCursor into myID,myQuery;
if v_finished = 1 then
leave myLoop;
end if;

set EHSone = b'0';
set EHStwo = b'0';
set EHSthree = b'0';
set EHSfour = b'0';
set myEHSkind = 0;

if myQuery like '%بیمارستان%' or myQuery like '%دکتر%' or myQuery like 
'%پزشک%' then
set  EHSone= b'1';
end if;

if myQuery like '%بیماری%' or myQuery like '%مریضی%'
set EHStwo = b'1';
end if;

if myQuery like '%علایم%' or myQuery like '%نشانه%' or myQuery like 
'%علت%' or myQuery like '%خارش%'  then
set EHSthree = b'1';
end if;

if myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like 
'%خواص%' 
or myQuery like '%عوارض%' then
set  EHSfour= b'1';
end if;

if EHSone = b'1' and EHStwo = b'1' and EHSthree=b'1' then
set myEHSkind = 8;
elseif EHSone = b'1' and EHStwo = b'1' then
set myEHSkind = 5;
elseif EHSone = b'1' and EHSthree = b'1' then
set myEHSkind = 6;
elseif EHStwo = b'1' and EHSthree = b'1' then
set myEHSkind = 7;
elseif EHSone = b'1' then
set myEHSkind = 1;
elseif EHStwo = b'1' then
set myEHSkind = 2;
elseif EHSthree = b'1' then
set myEHSkind = 3;
elseif EHSfour = b'1' then
set myEHSkind = 4;
end if;

update new_tbl_health set EHS_kind = myEHSkind where ID = myID;
end loop myLoop;
END

最佳答案

我没有以这种方式使用 if,但很可能,您的 if 语句仅影响与条件匹配的第一行。

如果您想更新所有符合条件的行,您可以尝试以下操作:

update #tableName set EHSfour= b'1' where (myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like '%خواص%' or myQuery like '%عوارض%');

关于Mysql if语句忽略第一个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051187/

相关文章:

php - MySQL 存储过程忽略 DELETE 语句

mysql - 如何使用Sql触发器列出表中的所有列

sql - 如何从 postgresql 中的时间戳中提取工作日?

mysql - 对区分大小写搜索的内置 SQL 排序功能感到困惑

mysql csv文件导入问题

php - 如何按照数据库中定义的顺序将行分配给并发进程?

java - 未配置连接

sql - 这个内部查询(MySQL)有什么问题

mysql - 添加复合主键删除索引

c# - 如何从mysql数据库导入数据到datagridview