注意:返回数量为0时函数返回值为false,返回数量为非零值时为true。

Java函数:

boolean hasSameServiceCode(@Param("oldDepotCd") String oldDepotCd,@Param("newDepotCd") String newDepotCd);

XML代码:

    <select id="hasSameServiceCode" resultType="java.lang.Boolean">
        select (case when count(*)=1 then 1 else 0 end) as cnt from (
            select distinct s.service_code 
            from depot d inner join service_carrier_mapping s
            on d.carrier_code=s.handling_carrier_code
            where exists (select null from DEPOT where depot_code=#{oldDepotCd})
            and exists (select null from DEPOT where depot_code=#{newDepotCd})
            and d.depot_code in (#{oldDepotCd},#{newDepotCd}) )
    </select>

取值:

cnt=1,返回true

cnt=0,返回false

注意,如果直接写select count(*) from XXX,因为会有0,1, >1三种情况,如果是0,返回值是false,这个没有争议;如果是1,返回值为true;如果是>1,返回值也为true。非零值都是true,这个是我实测了的,并不像网文 https://blog.csdn.net/qq_39039017/article/details/80700002 所说的只有1返回true,0和大于1的值都返回false。

像我上面的业务,只能在返回1时返回真,返回0或者其它值都得返回假,这就需要用case语句来转化一下。

--2020-04-07--

 

相关文章:

  • 1970-01-01
  • 2020-10-18
  • 2021-07-05
  • 2021-09-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-24
  • 2021-10-15
  • 2022-12-23
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案