gpt4 book ai didi

sql - 在 where 子句中使用 select 子句中的列号。提取别名原始名称

转载 作者:行者123 更新时间:2023-12-04 10:28:09 25 4
gpt4 key购买 nike

所以让我们说我有一个这样的查询

    SELECT a as d,b,c FROM myTable
WHERE a=1;

是否可以代替
a=1 键入类似 SELECTED.1 = 1 的内容或以某种方式提取别名的原始名称,因为 d=1 不起作用

最佳答案

由于有关何时评估 WHERE 子句的内部复杂性,因此无法执行此操作。但是,如果您要混淆的内容是一个您不想重复的长表达式,那么有一个典型的解决方案。来自 https://forums.oracle.com/forums/thread.jspa?threadID=1107532 :

The standard solution to this is, you move the query into an inline view (without the where-clause predicate), and then add the where-clause predicate, using the alias, in the outer query.

So something like this:

select ...
from (select ... here complex expression that is aliased ...
from ...
where ) A
where ... here condition that uses the A.alias column ...


在您的示例中,这将是:
SELECT d, b, c
FROM ( SELECT a AS d, b, c FROM myTable ) AS myAliasedTable
WHERE d = 1

但是,当然,这在您的字面示例中没有意义。如果您的别名只是一个列名,那么只需在 WHERE 中使用实际的列名,在这种情况下没有真正的缺点。

另请注意,如果您确实使用此方法,则应在内部查询中尽可能多地放置 WHERE 子句(意味着不引用别名列的部分)以限制生成的别名表的大小。例如,如果您还想在 b 上进行测试在你的例子中,那将是:
SELECT d, b, c
FROM (
SELECT a AS d, b, c
FROM myTable
WHERE b = 1
) AS myAliasedTable
WHERE d = 1

关于sql - 在 where 子句中使用 select 子句中的列号。提取别名原始名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com