0

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

列出属于 10 或 20 部门的所有 emps 的 empno、ename、sal、job、deptno 和经验,经验为 36 至 40 年,在同一经理下工作,无需佣金

我想出了以下查询:

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;

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

我在 StackOverflow 上寻找用户定义的变量问题,其中只有一个 得到了回答,但仍然不是我想要的。在那篇文章中,作者steampowered引用了 MySQL 文档

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

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

4

0 回答 0