工作内容,不对外开放
1、hmm.fixed_assets_flag != ‘是’ 的问题
mysql字段为null不能使用!=
数据库表中某一字段(mark)默认值为NULL,进行where语句查询时mark!=‘xxxx’,并不能将字段为NULL的数据查询出来。
1、mysql中空值不占空间,null值占空间。
2、当使用 IS NOT NULL 或者 IS NULL 时,只能查出字段中没有不为NULL的或者为 NULL 的,不能查出空值。
3、判断NULL 用IS NULL 或者 is not null,判断空字符用 =’‘或者<>’'来进行处理。
2、sql中的括号
1、说明
AND (hp.tenant_id = 0 <if test="tenantId != null and tenantId != 0">OR hp.tenant_id = #{tenantId}</if>)
和
AND hp.tenant_id = 0
<if test="tenantId != null and tenantId != 0">
OR hp.tenant_id = #{tenantId}
</if>
差别很大
2、案例
①
SELECT
hp.prompt_id,
hp.tenant_id,
hp.prompt_code,
hp.prompt_key,
hp.description,
hp.object_version_number,
hp.lang,
flt.description lang_description
FROM
hzero_platform.hpfm_prompt hp,
hzero_platform.fd_language fl,
fd_language_tl flt
WHERE
hp.lang = fl.CODE
AND fl.id = flt.id
AND hp.lang = 'zh_CN'
AND flt.lang = 'zh_CN'
AND hp.tenant_id = 0
OR hp.tenant_id = 2050
AND hp.prompt_id NOT IN (
SELECT
hpr.prompt_id
FROM
hzero_platform.hpfm_prompt hpr
JOIN hzero_platform.hpfm_prompt hpr1 ON (
hpr.prompt_key = hpr1.prompt_key
AND hpr.prompt_code = hpr1.prompt_code
AND hpr.lang = hpr1.lang
AND hpr1.tenant_id = 2050
)
WHERE
hpr.tenant_id = 0
);
查到的数据是10961
②
SELECT
hp.prompt_id,
hp.tenant_id,
hp.prompt_code,
hp.prompt_key,
hp.description,
hp.object_version_number,
hp.lang,
flt.description lang_description
FROM
hzero_platform.hpfm_prompt hp,
hzero_platform.fd_language fl,
fd_language_tl flt
WHERE
hp.lang = fl.CODE
AND fl.id = flt.id
AND hp.lang = 'zh_CN'
AND flt.lang = 'zh_CN'
AND ( hp.tenant_id = 0 OR hp.tenant_id = 2050 )
AND hp.prompt_id NOT IN (
SELECT
hpr.prompt_id
FROM
hzero_platform.hpfm_prompt hpr
JOIN hzero_platform.hpfm_prompt hpr1 ON (
hpr.prompt_key = hpr1.prompt_key
AND hpr.prompt_code = hpr1.prompt_code
AND hpr.lang = hpr1.lang
AND hpr1.tenant_id = 2050
)
WHERE
hpr.tenant_id = 0
);
查到的数据是10903
3、原因
1 and 2 or 3是(1 and 2) or 3
1 and (2 or 3)是1 and (2 or 3)
SELECT * FROM `hpfm_lov`
where tenant_id = 0 and (route_name = 'hap' or route_name = 'hdtt')
这段sql就不会把tenantId为4的hdtt数据也查出来