从sqlserver 转mysql 踩过的坑

从sqlserver 转mysql 踩过的坑
mysql和sqlserver 不同的地方
1.left join
sqlserver:select * from a(5条) left join b(5条) on a.id=b.id where b.id=1 数量是5条
mysql :select * from a(5条) left join b(5条) on a.id=b.id where b.id=1 数量是1条
mysql的left join 的where 会导致left join 变成inner join 的效果
2.取前几条数据
sqlserver:select top 100 * from a order by a.id
mysql :select * from a order by a.id limit 100
3.分组table a(id,name)
sqlserver:select id,max(name) from a group by id
不在分组项中的字段必须用类似max,min等函数
mysql :select id,name from a group by id
完全可以查询出来,如果name不同,查询不同有可能结果会不同
4.存储过程

声明变量:
sqlserver:DECLARE @startTime VARCHAR(20),@endTime VARCHAR(20),@DeptNo VARCHAR(20)
可以针对每个变量进行定义类型
mysql :DECLARE saleSum ,saleProMoney ,saleOtherMoney DECIMAL(15,2);如果想连续声明变量必须类型相同,在最后定义

短句结束
sqlserver:set @a=1 set @b=2
完全可以连续去写
mysql :set @a=1; set @b=2;
每个小短句后都需要去用;分号去代表结束,否则会报错

查询给变量赋值:
sqlserver:select @a=t.a,@b=t.b from table t
mysql :select t.a,t.b into @a,@b from table t;
这个赋值好像处理不好在计算时有时候会出查询数据不准确,忘了当时的情境

游标:
sqlserver:
–拼接用法用量start
DECLARE cursor_name CURSOR FOR
SELECT a,b,c FROM orderlist WHERE OrdersId=@ordersId ORDER BY StartTime
for read only
OPEN cursor_name
FETCH cursor_name INTO @a,@b,@c
WHILE(@@fetch_status=0)
BEGIN
–逻辑
SET @a= @a+1
FETCH cursor_name into @a,@b,@c
END
CLOSE cursor_name
DEALLOCATE cursor_name


mysql :
DECLARE done INT DEFAULT 0;
DECLARE testid INT;
– 创建游标,并存储数据
declare cur_test CURSOR for
select id from course;
– 游标中的内容执行完后将done设置为1
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1;
– 打开游标
open cur_test;
– 执行循环
REPEAT
FETCH cur_test into testid;
IF done <> 1 then
insert into test(id)
select testid;
end if ;
until done=1
END REPEAT;
– 释放游标
CLOSE cur_test;

5.还有其他一些不一样的地方,类似获取当前时间,select * into table 等

**

个人记录使用。

**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值