如何避免两次编写 SQL Server 查询以避免重复?
Posted
技术标签:
【中文标题】如何避免两次编写 SQL Server 查询以避免重复?【英文标题】:How do I avoid writing a SQL Server query twice to avoid duplication? 【发布时间】:2012-01-24 18:58:11 【问题描述】:我有一个 sql 查询,需要在整个查询中多次重复相同的 SELECT
语句作为其他计算的输入。
如何编写查询以便只定义重复的SELECT
SQL 语句一次?有没有一种方法可以避免在通过查询重复时出错?
更新: 在这种情况下,从 SELECT 返回的数据预计在 80% 的情况下小于 100 行,在其他 20% 的情况下最多为 100-200 行
CTE 和表格变量看起来都是有效的答案 - 但您如何知道在任何情况下哪个选项更合适?
【问题讨论】:
@ypercube -CTE
在这里不太合适,因为它只适用于一个查询。一旦我SELECT * FROM CTE
下一个查询看不到它,除非我重新定义 CTE 哪种违背了目的:)
@JNK:在这种情况下,视图可能会很方便。我认为 OP 想在同一个查询中多次使用同一个 SELECT。
他可能是,这不是很清楚。
@ypercube:你是对的——我想在同一个查询中多次重复使用同一个 SELECT,所以 CTE 非常适合。如果您将您的建议添加为实际答案,我会将其标记为正确的。谢谢!
【参考方案1】:
使用选择插入临时表或表变量。 (如果您认为数据集很小,请使用表变量,如果数据集很大,请使用临时表)。然后在所有后续查询中加入临时表或表变量,就像任何其他表一样。
【讨论】:
其他注意事项 - 临时表可以被索引并具有约束,而哪些变量不能。临时表在内部范围内也是可见的,而表变量仅在直接范围内可见。 不过,表变量对于 tempdb 锁定和并发问题的可能性确实较小。这并不总是一个明确的选择。【参考方案2】:如果您想在同一个查询中多次重复使用相同的SELECT
作为子查询,那么您可以使用Common Table Expressions (CTE)。
【讨论】:
以上是关于如何避免两次编写 SQL Server 查询以避免重复?的主要内容,如果未能解决你的问题,请参考以下文章
如何避免 BigQuery 中的 Power BI 增量刷新重复查询?
使用 TypeScript 时如何避免两次编写 Mongoose 的 Schema?
如何编写查询以避免在 select distinct 和 size collect_set hive 查询中使用单个 reducer?