MySQL用户在WHERE子句中定义了变量

时间:2017-08-03 03:50:34

标签: mysql user-variables

在常规EMP,DEPT表配置(Oracle提供的库存数据)中,我有以下查询要解决:

列出empno,ename,sal,job,deptno&所有emps的经验属于第10或第20部分,期限为36至40年,在相同的mgr下无佣金工作

我提出了以下问题:

SELECT 
  e.ENAME as EMPLOYEE
  , m.ENAME AS MANAGER
  , e.SAL, e.COMM, e.JOB, e.DEPTNO
  , (SELECT @exp := ROUND(DATEDIFF(NOW(), e.HIREDATE)/(12 * 30), 1) ) AS EXP
FROM EMP e INNER JOIN EMP m ON e.MGR = m.EMPNO
WHERE e.DEPTNO in (10, 20)
AND (e.COMM IS NULL or e.COMM = 0)
AND @exp BETWEEN 35.0 AND 40.0;

无论查询是对还是错,当我连续两次运行此查询时,第二次运行(以及所有后续运行)都不会产生任何结果(第一次运行)

我在StackOverflow上查找了用户定义的变量问题,但只有one有点回答,但仍然不是我想要的。在该帖子中,作者steampowered引用了MySQL文档

  

作为一般规则,您不应该为用户变量赋值   并在同一语句中读取值。你可能会得到   你期望的结果,但这不能保证。

如果是这样,那么我们如何防止在SELECT和WHERE CLAUSE中重复计算?

0 个答案:

没有答案