Gio*_*ous 5 t-sql sql-server oracle connect-by
Oracle SQL 支持START WITH表达式。例如,
CREATE VIEW customers AS
SELECT LEVEL lvl, customer_code, customer_desc, customer_category
FROM customers_master
START WITH some_column = '0'
CONNECT BY PRIOR CUSTOMER_CODE = PARENT_CUSTOMER_CODE;
Run Code Online (Sandbox Code Playgroud)
如果表包含分层数据,则可以使用分层查询子句按分层顺序选择行。
START WITH指定层次结构的根行。
CONNECT BY指定层次结构的父行和子行之间的关系。
MS-SQL 是否有等效的表达式?
不直接。您可以使用递归 CTE(公用表表达式),如下所示,这需要更多的编写:
;WITH RecursiveCTE AS
(
-- Anchor (START WITH)
SELECT
customer_code,
customer_desc,
customer_category,
Level = 1
FROM
customers_master AS C
WHERE
C.some_column = '0'
UNION ALL
-- Recursive join
SELECT
C.customer_code,
C.customer_desc,
C.customer_category,
Level = R.Level + 1
FROM
RecursiveCTE AS R -- Note that we are referencing a table that we are just declaring as CTE
INNER JOIN customers_master AS C ON
R.CUSTOMER_CODE = C.PARENT_CUSTOMER_CODE
)
SELECT
R.*
FROM
RecursiveCTE AS R
Run Code Online (Sandbox Code Playgroud)
需要稍微回顾一下递归连接的列,但您应该明白了。
| 归档时间: |
|
| 查看次数: |
3536 次 |
| 最近记录: |