通常の EMP,DEPT テーブル構成 (Oracle が提供する株式データ) では、次のクエリを解決する必要があります。
empno、ename、sal、job、deptno、および部門 10 または 20 に属するすべての従業員の経験をリストし、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 回続けて実行すると、2 回目の実行 (およびその後のすべての実行) で結果が生成されません (最初の実行で結果が生成されます)。
StackOverflowでユーザー定義変数の質問を探しましたが、そのうちの1つだけ が答えましたが、探していたものではありませんでした。その投稿で、作者steampoweredは MySQL のドキュメントを引用しています。
原則として、ユーザー変数に値を割り当てたり、同じステートメント内で値を読み取ったりしないでください。期待どおりの結果が得られる可能性がありますが、これは保証されません。
もしそうなら、SELECT と WHERE 句で計算を繰り返さないようにするにはどうすればよいでしょうか?