如何在 WHERE 子句中使用临时列名?
How to use temporary column's name in WHERE clause?
首先,我不得不说我在来这里之前已经研究过我的问题并看到了类似的 question here 及其所有答案,但不幸的是它没有帮助我。
甲骨文 SQL.
我有:
SELECT
first_name,
salary_dollars,
0.85 * salary_dollars AS salary_euro
FROM
employees
WHERE
0.85 * salary_dollars > 4000;
其中 salary_euro
是我的临时专栏。我想避免在 WHERE
子句中进行双重计算,但是如果我在我的请求中写 WHERE salary_euro > 4000
然后我得到这个错误:
ORA-00904: "SALARY_EURO": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 6 Column: 7
绕过此限制的一种方法是使用子查询来创建临时列:
SELECT *
FROM (SELECT first_name,
salary_dollars,
0.85 * salary_dollars AS salary_euro
FROM employees) e
WHERE salary_euro > 4000;
Oracle 现在支持横向联接。这允许您将定义移动到 FROM
子句:
SELECT e.first_name, e.salary_dollars, x.salary_euro
FROM employees e CROSS JOIN LATERAL
(SELECT 0.85 * e.salary_dollars AS salary_euro FROM DUAL
) x
WHERE x.salary_euro > 4000;
横向联接可以更简单地定义计算链,因为下一个表达式可以依赖于前一个表达式。
当然,使用CTE或子查询的传统方法也很可行。
首先,我不得不说我在来这里之前已经研究过我的问题并看到了类似的 question here 及其所有答案,但不幸的是它没有帮助我。
甲骨文 SQL.
我有:
SELECT
first_name,
salary_dollars,
0.85 * salary_dollars AS salary_euro
FROM
employees
WHERE
0.85 * salary_dollars > 4000;
其中 salary_euro
是我的临时专栏。我想避免在 WHERE
子句中进行双重计算,但是如果我在我的请求中写 WHERE salary_euro > 4000
然后我得到这个错误:
ORA-00904: "SALARY_EURO": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 6 Column: 7
绕过此限制的一种方法是使用子查询来创建临时列:
SELECT *
FROM (SELECT first_name,
salary_dollars,
0.85 * salary_dollars AS salary_euro
FROM employees) e
WHERE salary_euro > 4000;
Oracle 现在支持横向联接。这允许您将定义移动到 FROM
子句:
SELECT e.first_name, e.salary_dollars, x.salary_euro
FROM employees e CROSS JOIN LATERAL
(SELECT 0.85 * e.salary_dollars AS salary_euro FROM DUAL
) x
WHERE x.salary_euro > 4000;
横向联接可以更简单地定义计算链,因为下一个表达式可以依赖于前一个表达式。
当然,使用CTE或子查询的传统方法也很可行。