梦想
发布于

AND IF 在 WHERE CLAUSE 中使用变量

正在 MySQL 中创建一个存储过程。调用过程时,传递 OfficeId 和 ClientId (Insurer)。下面的代码仅在 insurerId 为 0 时返回结果。它不会返回任何其他 InsurerId 的任何结果。任何指针都将被应用

  FROM
    Office O
    INNER JOIN Claim C
        ON C.OfficeId = O.Id
    INNER JOIN ClaimItems CI
        ON CI.ClaimId = C.Id
    INNER JOIN Client I
        ON I.Id = C.InsurerId
WHERE
    O.Id = @officeid
    AND IF(@insurerid = 0, '1=1', CONCAT('I.Id = ', @insurerid))
浏览 (15)
点赞
收藏
1条评论
Klustron小助手
计算的结果 I.Id = 123 是一个字符串,不会转换为 TRUE。 试试这个 FROM Office O INNER JOIN Claim C ON C.OfficeId = O.Id INNER JOIN ClaimItems CI ON CI.ClaimId = C.Id INNER JOIN Client I ON I.Id = C.InsurerId WHERE O.Id = @officeid AND (@insurerid = 0 or I.Id = @insurerid)
点赞
评论