exists :如果子查询查询到了列那么就为真。
not exists : 如果子查询查询不到结果则返回值为真。
如果配合 insertinto、select、update、delete的where 条件使用,就能根据某些条件,先判断条件是否满足在做相应的操作。
示例:
用户做报警插入时,需要要传入一个报警周期时间filterTime,在这个周期内不存在同样的一条记录才做新增,否则不需要新增,避免频繁报警。
INSERT INTO work_alarm_record(create_time, alarm_time, alarm_state,alarm_content,foreign_name,foreign_id,device_id,var_id)SELECT NOW(),#{insertDO.alarmTime},#{insertDO.alarmState}, #{insertDO.alarmContent},#{insertDO.foreignName},#{insertDO.foreignId},#{insertDO.deviceId},#{insertDO.varId}
FROM dualWHERE not exists (SELECT id FROM work_alarm_record WHERE (alarm_state = 4 or alarm_state = 2)and var_id = #{insertDO.varId} and alarm_time > #{filterTime} ORDERBY alarm_time desc limit 1);
DUAL表
MySQL中的DUAL表是一个虚拟表,用于返回一个行。DUAL表只包含一列和一行数据
* 做条件判断是需要借助DUAL表才能完成。