mysql if语句忽略第一个条件

laximzn5  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(439)

我在mysql过程中有这样一个if语句:

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

令我惊讶的是,我发现上面的if语句忽略了myquery,比如'%فواید%'. 它检查其他条件并设置 EHSfour = 1 什么时候 myQuery is like '%مضرات%' or '%خواص%' or '%عوارض%' 但不是什么时候 myQuerylike '%فواید%' .
为什么mysql会这样?在什么情况下mysql可能会这样做?
mysql版本是5.7,我使用的是mysql workbench 6.3 ce。
更新:在我的代码中,我有:

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

然后:

  1. update new_tbl_health set EHS_kind = myEHSkind where ID = myID;

以下是我的整个过程:

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `fillEHSKind`()
  2. BEGIN
  3. declare myEHSkind int default 0;
  4. declare EHSone,EHStwo,EHSthree,EHSfour bit;
  5. declare myID int(11);
  6. declare myQuery varchar(500);
  7. declare v_finished integer default 0;
  8. declare myCursor cursor for select ID,Query from new_tbl_health;
  9. declare continue handler for not found set v_finished = 1;
  10. open myCursor;
  11. myLoop: loop
  12. fetch myCursor into myID,myQuery;
  13. if v_finished = 1 then
  14. leave myLoop;
  15. end if;
  16. set EHSone = b'0';
  17. set EHStwo = b'0';
  18. set EHSthree = b'0';
  19. set EHSfour = b'0';
  20. set myEHSkind = 0;
  21. if myQuery like '%بیمارستان%' or myQuery like '%دکتر%' or myQuery like
  22. '%پزشک%' then
  23. set EHSone= b'1';
  24. end if;
  25. if myQuery like '%بیماری%' or myQuery like '%مریضی%'
  26. set EHStwo = b'1';
  27. end if;
  28. if myQuery like '%علایم%' or myQuery like '%نشانه%' or myQuery like
  29. '%علت%' or myQuery like '%خارش%' then
  30. set EHSthree = b'1';
  31. end if;
  32. if myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like
  33. '%خواص%'
  34. or myQuery like '%عوارض%' then
  35. set EHSfour= b'1';
  36. end if;
  37. if EHSone = b'1' and EHStwo = b'1' and EHSthree=b'1' then
  38. set myEHSkind = 8;
  39. elseif EHSone = b'1' and EHStwo = b'1' then
  40. set myEHSkind = 5;
  41. elseif EHSone = b'1' and EHSthree = b'1' then
  42. set myEHSkind = 6;
  43. elseif EHStwo = b'1' and EHSthree = b'1' then
  44. set myEHSkind = 7;
  45. elseif EHSone = b'1' then
  46. set myEHSkind = 1;
  47. elseif EHStwo = b'1' then
  48. set myEHSkind = 2;
  49. elseif EHSthree = b'1' then
  50. set myEHSkind = 3;
  51. elseif EHSfour = b'1' then
  52. set myEHSkind = 4;
  53. end if;
  54. update new_tbl_health set EHS_kind = myEHSkind where ID = myID;
  55. end loop myLoop;
  56. END
q7solyqu

q7solyqu1#

我没有以这种方式使用if,但是很可能,if语句只影响与条件匹配的第一行。
如果要更新与条件匹配的所有行,可以尝试以下操作:

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

相关问题