提问人:John Saunders 提问时间:11/23/2010 最后编辑:CommunityJohn Saunders 更新时间:11/24/2010 访问量:1289
如何使用公用表表达式将 SQL 查询转换为不使用公用表表达式的 SQL 查询(对于 SQL Server 2000)
How to Convert a SQL Query using Common Table Expressions to One Without (for SQL Server 2000)
问:
我刚刚找到了一个适当的解决方案,即如何查找按键重复但在所有列中不重复的行?,对存储过程进行编码,然后得知数据库卡在SQL Server 2000。
当然,我的解决方案很大程度上依赖于公用表表达式。
谁能为我提供一组用于转换回 SQL Server 2000 方言的 ru les?
请注意,我有这样的东西L:
;
WITH CTE1 AS ( ... ),
CTE2 AS (SELECT ... FROM CTE1 ... ),
CTE3 AS (SELECT ... FROM CTE1 INNER JOIN CTE2 ...)
SELECT * FROM CTE3
WHERE criteria
ORDER BY sequence
这似乎会让事情变得更有趣......
更新:没有一个 CTE 是递归的。
答:
3赞
Philip Kelley
11/23/2010
#1
我认为不可能提出可以轻易将任何 cte 转换为非 cte 语句的规则。因为可能性过于开放(特别是如果您正在使用递归 CTE)。我能想到的最接近的方法是按顺序获取每个 CTE,将其分解为自己的查询,并使用它来填充以下查询使用的临时表。效率低下,不能保证在所有可能的情况下都能工作。
评论
0赞
John Saunders
11/23/2010
对不起,应该指定没有一个是递归的。
6赞
Brad
11/24/2010
#2
两种选择(当然,两者都不漂亮——这就是我们喜欢 CTE 的原因)
选项 1
创建一个临时表(或者如果足够小),并像引用 CTE 一样引用它。完成后放下。#
@
选项 2将整个 CTE 作为表放在查询部分中。SELECT
FROM
SELECT *
FROM (SELECT *
FROM table1) oldCTE
评论
0赞
John Saunders
2/18/2011
很抱歉延迟接受您的回答。我最终得到了临时表,并解决了一个问题。
评论