WHILE 条件在 MYSQL 查询中无法正常工作?

WHILE conditions are not working properly in MYSQL query?

提问人:sheetal singh 提问时间:12/4/2022 最后编辑:sheetal singh 更新时间:12/4/2022 访问量:43

问:

我正在通过自我练习来学习MySQL。在一个项目中,我想使用 MySQL (phpMyAdmin) 创建一个传输模块。不幸的是,WHERE 条件运行不佳。我使用 XAMPP 应用程序执行查询。查询的一部分是 -

 SELECT 
    *
FROM
    (SELECT 
        `emp_id`,
            `emp_name`,
            `present_posting`,
            `curr_zone`,
            `office_ID1` AS `new_office`,
            `Zone1` AS `new_zone`,
            `office_ID1` AS `C1`,
            `post`,
            `preference`,
            `curr_zone_id`
    FROM
        `transfer_applications`
    WHERE
        `Mutual Accepted` != 'Mutual Accepted'
    ORDER BY `apID` ASC) `aa`
        LEFT JOIN
    (SELECT 
        `zone_ID`, `ZONE`, `office_ID`, `office_Vacancy`
    FROM
        `vacancy`) `ab` ON `aa`.`C1` = `ab`.`office_ID`
        LEFT JOIN
    (SELECT 
        `zid`, `max_min_vacancy`
    FROM
        `capping_vacancy`) `ac` ON `aa`.`new_zone` = `ac`.`zid`
WHERE
    ((`curr_zone_id` != `new_zone`
        AND (`max_min_vacancy` < 150
        AND `max_min_vacancy` > 1)
        AND `station_Vacancy` > 0
        AND `post` = 4
        AND `apID` = x + 1)
        OR (`curr_zone_id` = `new_zone`
        AND `station_Vacancy` > 0))

问题在于,即使没有可用的空缺,它也允许转移,即WHERE(>1)中的最小上限不起作用。我无法找出它跳过此条件而 WHERE 中的所有其他条件都正常工作的原因。请帮我找出错误。谢谢。max_min_vacancy

MySQL SQL While-loop XAMPP

评论

0赞 nbk 12/4/2022
没有表格和数据,我们也找不到,meta.stackoverflow.com/questions/333952/...
0赞 nbk 12/4/2022
虽然只允许在过程中与其他循环或游标一样,但也许这会对您有所帮助
0赞 NickW 12/4/2022
此外,您不需要所有这些子选择 - 只需将表格连接在一起即可。ORDER BY 也不会产生任何影响
0赞 sheetal singh 12/4/2022
@nbk是的,它是过程的一部分,并使用 WHILE。不幸的是,它没有考虑 (max_min_vacancy > 1)
0赞 sheetal singh 12/4/2022
@nbk我原来的查询很长。所以我发布了一个有问题的部分。

答:

0赞 JHH 12/4/2022 #1

该子句由 连接,因此,如果第一个布尔表达式为 FALSE(即.max_min_vacancy <=1),则只要第二个布尔表达式返回 TRUE,它仍然是 TRUE。WHEREOR

...
WHERE
    (
     (
      `curr_zone_id` != `new_zone`    AND 
         (
          `max_min_vacancy` < 150     AND 
          `max_min_vacancy` > 1             -- if max_min_vacancy <= 1 --> FALSE
         )                            AND 
       `station_Vacancy` > 0          AND 
       `post` = 4                     AND 
       `apID` = x + 1
     )
  OR (                                      -- But this condition is TRUE
      `curr_zone_id` = `new_zone`     AND 
      `station_Vacancy` > 0
     )
    )

评论

0赞 sheetal singh 12/4/2022
是的,因为我只想为跨区域转移设置上限,但谢谢,因为我因为你的回答而引起了我错的地方的关注。再次感谢。