select * ,case user_id when 4 then 'ss' when 5 then 'tt' end as "hh" from sys_user
当user_id 为4 的值, 给一个名叫hh的字段,值为ss
当user_id 为5的值, 给一个名叫hh的字段tt
选择迭代一个目标 让符合迭代item的值查询出来
<select id="getByDeptids" resultMap="BaseResultMap2">
select r.*,d.dept_name from sys_role r left join sys_dept d on r.dept_id = d.dept_id where r.dept_id in
<foreach collection="deptids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
order by r.dept_id
</select>
TO_DAYS 比较时间戳
mysql下
SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30
sql Server 下
SELECT * FROM batch_master WHERE (GETDATE() - create_time) <= 50
Sqlserver 分页查询
select top ${limit} *
from (select row_number()
over(order by id asc) as rownumber,*
from sys_offline) row
where rownumber>((${page}-1)*${limit}) and isActive = 0;
或者
此种写法mybatis可能会报错,所以需要在业务层直接将分页后的值直接${page}写在((1-1)*10)处
select top (10) * from sys_offline
where id not in (select top ((1-1)*10) id from sys_offline ORDER BY createdate DESC)
ORDER BY createdate DESC
With as
with cte as
(
select Id,Pid,DeptName,0 as lvl from Department
where Id = 2
union all
select d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join Department d
on c.Id = d.Pid
)
select * from cte
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
存储过程
执行10次,查询到每一个id 然后在用户账户中再查询所有内容
delimiter //
drop PROCEDURE if EXISTS wk;
create PROCEDURE wk()
BEGIN
declare i int;
set i = 1;
while i < 10 DO
select * from cususeraccount where cususeraccount.userId in (select id from cususer where id = i);
set i = i+1;
end while;
end //
call wk()
*****************************************************************************************************************************************
存储过程的使用
delimiter //
drop PROCEDURE if EXISTS wk;
create PROCEDURE wk() /* 创建一个名字叫wk的存储过程*/
BEGIN
DECLARE flag int DEFAULT(0); /* 设置循环时候要参考的flag 默认值0*/
DECLARE myListOfOne int DEFAULT(0);
DECLARE myList CURSOR FOR(SELECT userId AS userIdTemp FROM `orderdetails` WHERE `shopId` = 66 and `detailStatus` ='SUCCESS' limit 4); /* 创建游标,并把查询到的4个数据给myList 变量*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1; /* 声明,当for处理到最后时候把flag设置为1*/
OPEN myList; /*打开游标*/
FETCH myList into myListOfOne; /* 从myList中获取一个值,并赋值给myListOfOne*/
WHILE(flag <> 1)DO /* flag != 1 时候就一直循环*/
select * from cususer where id=myListOfOne; /* 通过myList 中获得的用户id 再去cususer表中查询对应数据*/
FETCH myList into myListOfOne; /* 每次循环都要再次获得一个myListOfOne */
END while;
end //
delimiter ;
call wk()