注意:返回數量為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--