在常规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中重复计算?