很多时候我们需要判断某些数据是否存在,比如用户名是否存在,邮箱是否存在。
这是通常的做法是使用count(*)
,然后判断数据的条数,大于0则代表数据存在。
select (*) from ujcms_user t where t.username = ?
这种方式,数据库需要查询所有符合条件的数据后,才返回结果。如果是一个很大的表,则可能耗费较长时间。
而exists
可以在找到第一条数据后,就返回结果,性能更好。
select
case
when exists(
select * from ujcms_article t where t.channel_id_ = #{channelId}
)
then 1
else 0
end as non_zero_exists
如果数据存在就返回1
,不存在就返回0
。