Пользовательские переменные MySQL в предложении WHERE
В обычной конфигурации таблицы EMP,DEPT (данные о запасах, предоставляемые Oracle) мне нужно решить следующий запрос:
Перечислите empno,ename,sal,job,deptno и опыт работы всех emp, принадлежащих к отделу 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 раза подряд, второй прогон (и все последующие прогоны) не дает никакого результата (первый прогон делает)
Я искал пользовательские переменные вопросы в Stackru, и только один из них любопытно ответил, но все еще не то, что я искал. В этом посте автор цитирует документацию по MySQL.
Как правило, вы никогда не должны присваивать значение пользовательской переменной и читать значение в том же выражении. Вы можете получить ожидаемые результаты, но это не гарантировано.
Если это так, то как мы можем предотвратить повторение вычислений в SELECT и WHERE CLAUSE?