簡體   English   中英

如何使用公用表表達式將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方言的文件嗎?

請注意,我有像這樣的東西:

;
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是遞歸的。

兩個選項(授予,兩者都不漂亮 - 這就是我們喜歡CTE的原因)

選項1

創建臨時表( # ,或者足夠小@ )並像CTE一樣引用它。 完成后放棄。

選項2將整個CTE SELECT作為表放在查詢的FROM部分中。

SELECT *
FROM  (SELECT *
       FROM table1) oldCTE

我不認為有可能提出容易將任何 cte轉換為非cte語句的規則。 因為可能性太開放(特別是如果你正在使用遞歸CTE)。 我能想到的最接近的是將每個CTE按順序排除,將其分解為自己的查詢,並使用它來填充以下查詢使用的臨時表。 幾乎沒有效率,也沒有在所有可能的情況下工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM