Questions tagged «alias»

2
子查询的别名与主查询的别名相同
我有一个别名与其子查询别名相同的SQL查询。 例如: select * from ROOM r where ... ( select * from ROAD r where ... ) 这很好用,因为子查询的别名似乎隐藏了主查询的别名。 在所有情况下都可以那样工作吗? 我会得到不确定的结果吗? 如果可以的话,如何引用主查询r呢?

3
为什么查询的解析方式不允许大多数子句中使用列别名?
在尝试编写查询时,我发现(困难的方式)SQL Server在执行查询时在解析SELECT之前很久就解析了查询中的WHERE。 的MSDN文档说,一般逻辑解析顺序是这样的:SELECT被解析几乎最后(因此导致“没有这样的对象[别名]”试图使用在其他条款列别名时误差)。甚至有人建议允许在任何地方使用别名,这被Microsoft团队否决,理由是ANSI标准合规性问题(这表明此行为是ANSI标准的一部分)。 作为程序员(不是DBA),我发现这种行为有些令人困惑,因为在我看来,它在很大程度上违反了使用列别名的目的(或者至少可以使列别名的功能更加强大)。在查询执行的较早阶段进行了解析),因为您真正可以使用别名的唯一位置是ORDER BY。作为程序员,似乎缺少使查询变得更强大,更便捷和更干燥的巨大机会。 看起来这是一个显而易见的问题,因此,还有其他原因决定除SELECT和ORDER BY之外的任何内容都不应使用列别名,但是这些原因是什么?
16 sql-server  alias 

3
使用SUM()两次不是最佳选择?
我知道我必须写SUM两次,如果我想在HAVING子句中使用它(否则要使用派生表): SELECT id, sum(hours) AS totalhours FROM mytable GROUP BY id HAVING sum(hours) > 50; 我现在的问题是,这是否不是最理想的。作为程序员,该查询看起来像数据库将两次计算总和。是这样,还是我应该依靠数据库引擎为我做的优化? 更新:对类似查询的解释: postgres=> explain select sum(counttodo) from orderline group by orderlineid having sum(counttodo) > 100; QUERY PLAN -------------------------------------------------------------------- HashAggregate (cost=1.31..1.54 rows=18 width=8) Filter: (sum(counttodo) > 100) -> Seq Scan on orderline (cost=0.00..1.18 rows=18 width=8) (3 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.