mysql:用户自定义变量关联失效
自定义变量的属性和限制
- 使用自定义变量的查询,无法使用查询缓存。
- 不能在使用常量或者标识列的地方使用自定义变量,例如表名、列明和LIMIT子句中。
- 用户自定义变量的生命周期是在一个连接中有效,所以不能使用它们来做连接间的通信。
- 如果使用连接池或者持久化连接,自定义变量可能让看起来毫无关系的代码发生交互。
- 在5.0版本之前,是大小写敏感的,所以要注意代码在不同版本之间的兼容性问题。
- 不能显示的声明自定义变量的类型。它是一个动态类型。整数初始化为0,浮点型初始化为0.0,字符串初始化为’’。
- MySQL优化器在某些场景下可能会将这些变量优化掉,这可能导致代码不按预想的方式运行。
- 赋值的顺序和赋值的时间点并不总是固定的,这依赖于优化器的决定。
- 赋值符号:=的优先级非常低,所有要注意赋值表达式应该使用明确的括号。
- 使用未定义变量不会产生任何错误,如果没有意识到这一点,非常容易犯错。
- SET @applykey = 0, @loanRank = 0;
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- , IF(STATUS = 1, IF(@applykey <> custId, @loanRank := 1, @loanRank := @loanRank + 1), '') AS applyPassRank
- , @applykey := custId
- FROM (
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- FROM sync.credit_apply
- WHERE updateTime < '2019-11-27'
- ORDER BY custId, updateTime
- ) t;
- SET @cfkkey = 0, @cfkRank = 0;
- SELECT cust_id, loan_amt_quota
- , IF(@cfkkey <> cust_id, @cfkRank := 1, @cfkRank := @cfkRank + 1) AS cfkRank
- , @cfkkey := cust_id
- FROM (
- SELECT cust_id, loan_amt AS loan_amt_quota
- FROM sync.loandb_cfk_loan
- ORDER BY cust_id, create_time
- ) t
- SET @applykey = 0, @loanRank = 0;
- SET @cfkkey = 0, @cfkRank = 0;
- CREATE TABLE test2
- AS
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, loan_amt_quota
- , IF(first_finish_loan_Time IS NULL, 1, IF(updateTime < first_finish_loan_Time, 1, 0)) AS is_new
- , createTime, updateTime, mobile, applyPassRank, cfk_Rank
- FROM (
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- , IF(STATUS = 1, IF(@applykey <> custId, @loanRank := 1, @loanRank := @loanRank + 1), '') AS applyPassRank
- , @applykey := custId
- FROM (
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- FROM sync.credit_apply
- WHERE updateTime < '2019-11-27'
- ORDER BY custId, updateTime
- ) t
- ) apply
- LEFT JOIN (
- SELECT cust_id
- , CASE
- WHEN locate('|', updateTime) > 0 THEN SUBSTR(updateTime, 1, INSTR(updateTime, '|') - 1)
- ELSE updateTime
- END AS first_finish_loan_Time
- FROM (
- SELECT cust_id, GROUP_CONCAT(update_Time ORDER BY update_Time ASC SEPARATOR '|') AS updateTime
- FROM sync.loandb_cfk_loan
- WHERE (substr(update_Time, 1, 10) < '2019-11-27'
- AND loan_type = 'xxx'
- AND loan_status = 'yyy')
- GROUP BY cust_id
- ) t
- ) cfk_loan
- ON apply.custId = cfk_loan.cust_id
- LEFT JOIN (
- SELECT cust_id, loan_amt_quota
- , IF(@cfkkey <> cust_id, @cfkRank := 1, @cfkRank := @cfkRank + 1) AS cfk_Rank
- , @cfkkey := cust_id
- FROM (
- SELECT cust_id, loan_amt AS loan_amt_quota
- FROM sync.loandb_cfk_loan
- ORDER BY cust_id, create_time
- ) t
- ) quota
- ON apply.custId = quota.cust_id
- AND apply.applyPassRank = quota.cfk_Rank;
后来发现不是这个问题而是多加上一个排序字段就OK了:
- SET @applykey := ,
- @loanRank = ;
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- , IF(STATUS = , IF(@applykey <> custId, @loanRank := , @loanRank := @loanRank + ), '') AS applyPassRank
- , @applykey := custId
- FROM (
- SELECT applyId, custId, ruleVersion, rejectRule, STATUS
- , extra, createTime, updateTime, mobile
- FROM sync.credit_apply
- WHERE updateTime < '2019-11-28'
- ORDER BY custId,STATUS, updateTime
- ) t HAVING custId=xxx33089
mysql:用户自定义变量关联失效的更多相关文章
- 深入MySQL用户自定义变量
一.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话变量 系统变量 会话变量 全局变量 本文涉及的内容为用户自定义会话变量 ...
- 深入MySQL用户自定义变量:使用详解及其使用场景案例
一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连 ...
- 如何在.Net的MySqlCommand里面使用MySql用户自定义变量?
Mysql使用@符号代表变量,但C#也恰好使用@代表用户自定义变量,这样两者就会正好冲突了. SELECT () AS rowId, u.*, r.RoleName FROM userinfo u L ...
- mysql 用户自定义变量
SQL中可以用变量来操作值.那么问题就来了.mysql中怎么定义一个变量呢? 一.定义变量 1.定义变量的语法: set @var_name=expr [,@var_name=expr] ... 2. ...
- mysql用户自定义变量
可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句.用户变量与连接有关.也就是说,一个客户端定义的变量不能被其它客户端看到或使用.当客户端退出时,该客户端连接的所有变量将 ...
- MySQL的变量分类总结
在MySQL中,my.cnf是参数文件(Option Files),类似于ORACLE数据库中的spfile.pfile参数文件,照理说,参数文件my.cnf中的都是系统参数(这种称呼比较符合思维习惯 ...
- jmeter参数化数据(_csvread函数、用户自定义变量等)
以下是转载内容,仔细看过后,觉得用得最多的应该是csvread函数.用户自定义变量以及CSV DATA CONFIG控制器这几个,但是做练习之后,在结果树和聚合报告中怎么查看执行结果是个问题,没找到对 ...
- Mysql自定义变量的使用
用户自定义变量是一个容易被遗忘的MySQL特性,但是如果能用的好,发挥其潜力,在某些场景可以写出非常高效的查询语句.在查询中混合使用过程化和关系化逻辑的时候,自定义变量可能会非常有用.单纯的关系查询将 ...
- mysql之变量
本文内容: 系统变量 用户变量 局部变量 首发日期:2018-04-18 系统变量: 系统变量就是系统已经提前定义好了的变量 系统变量一般都有其特殊意义.比如某些变量代表字符集.某些变量代表某些mys ...
随机推荐
- 【牛客网】Idol Master
[牛客网]Idol Master 也是一道网络流解线性规划 不过需要从小于号的那边解 限制是\(a \leq \sum_{i = 1}^{k} x_{i}\leq b\) 其中\(0 \leq x_{ ...
- 无线网卡SP-WL450U的驱动问题
修改win10的设备驱动为需要的驱动,SP-WL450U的驱动问题 解决SP-WL450U的驱动问题,在电脑上安装无线网卡后,总是用不上5G信号,只能选择2.4G.重新安装程序后也不行,在反复试用后发 ...
- python学习-25 函数递归
递归 例如: def abc(n): print(n) if int(n/2) == 0: return n return abc(int(n/2)) abc(10) 运行结果: 10 5 2 1 P ...
- Redis主从及Cluster区别及注意事项
https://yq.aliyun.com/articles/647342 https://blog.csdn.net/biren_wang/article/details/78117392 http ...
- JS 04 Date_Math_String_Object
Date <script> //1.Date对象 var d1 = new Date(); //Thu May 02 2019 14:27:19 GMT+0800 (中国标准时间) con ...
- Qt实现艺术字效果
Qt实现艺术字效果,通常有三种方式,一种是通过绘制机制,另外一种是使用样式表,最后一种是通过图片代替,本次介绍使用绘制来实现艺术字效果. 代码如下(分两种实现): 第一种: QPainter pain ...
- 2019杭电多校二 F. Fantastic Magic Cube (FWT)
大意: 给定$N^3$立方体, 每个单位立方体权值为三个坐标异或, 每次沿坐标轴切一刀, 得分为两半内权值和的乘积, 求切成$n^3$块的最大得分. 可以发现得分与切法无关, 假设每个点权值为$a_i ...
- win10 amd显卡开机黑屏很久
转载自:https://jingyan.baidu.com/article/3c48dd34844e0ce10ae35865.html 升级win10后,使用a卡的小伙伴应该会大为恼火,开机竟然需要黑 ...
- class类 - extends
继承是面向对象中一个比较核心的概念.ES6 class的继承与java的继承大同小异,如果学过java的小伙伴应该很容易理解,都是通过extends关键字继承.相较于ES5当中通过原型链继承要清晰和方 ...
- redis cluster异地数据迁移,扩容,缩容
由于项目的服务器分布在重庆,上海,台北,休斯顿,所以需要做异地容灾需求.当前的mysql,redis cluster,elastic search都在重庆的如果重庆停电了,整个应用都不能用了. 现在考 ...