SQLSERVER中CTE语句结构及CTE递归查询
SQL SERVER中CTE语句结构及CTE递归查询 CTE语句结构 公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的
SQL SERVER中CTE语句结构及CTE递归查询
CTE语句结构
公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。
使用上面的test4表为例:
WITH TEST_CTE
AS
(
select * from test4
)
此句创建了名为TEST_CTE的select * from test4的结果集。由于它不存储为对象,并且只在查询期间有效,所CTE和查询语句需要在一起执行:
WITH TEST_CTE
AS
(
select * from test4
)
select * from TEST_CTE
结果集跟select * from test4结果集机同。
下面是指定列的CTE使用:
WITH TEST_CTE(id)
AS
(
select id from test4
)
定义中的列需要与语句里面的列对应,,见红色字体。
CTE可用于创建递归查询。
创建测试表并插入数据:
create table test5
(
id int,
name varchar(50),
parentid int
)
insert into test5(id,name,parentid)
select 1,'父类1',0
union all
select 2,'父类2',0
union all
select 3,'父类3',0
union all
select 11,'子类11',1
union all
select 12,'子类12',1
union all
select 111,'子子类111',11
union all
select 22,'子类22',2
union all
select 222,'子子类222',22
结果:
id name parentid
1 父类1 0
2 父类2 0
3 父类3 0
11 子类11 1
12 子类12 1
111 子子类111 11
22 子类22 2
222 子子类222 22
使用CTE创建递归查询,获取父类1及所有其子类及子类的子类...:
with Test_Recursion(id,name,parentid,[level])
AS
(
select id,name,parentid,0 from test5 where id =1--没有引用CTE自身必须放在第一个递归行之上
union all--没有引用CTE自身的语句和第一个递归行之间必须用UNION ALL
select a.id,a.name,a.parentid,b.[level]+1 from test5 as a join Test_Recursion as b on a.parentid=b.id--递归行
)
select * from Test_Recursion
结果:
id name parentid level
1 父类1 0 0
11 子类11 1 1
12 子类12 1 1
111 子子类111 11 2

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









インポート手順は次のとおりです。 MDF ファイルを SQL Server のデータ ディレクトリ (通常は C:\Program Files\Microsoft SQL Server\MSSQL\DATA) にコピーします。 SQL Server Management Studio (SSMS) でデータベースを開き、[アタッチ] を選択します。 「追加」ボタンをクリックして、MDF ファイルを選択します。データベース名を確認し、「OK」ボタンをクリックします。

C++ 関数の再帰の深さは制限されており、この制限を超えるとスタック オーバーフロー エラーが発生します。制限値はシステムやコンパイラによって異なりますが、通常は 1,000 ~ 10,000 の間です。解決策には次のものが含まれます: 1. 末尾再帰の最適化、2. 末尾呼び出し、3. 反復実装。

SQL Server データベースを誤って削除した場合は、次の手順を実行して回復できます: データベース アクティビティの停止、ログ ファイルのバックアップ、データベース ログの確認、回復オプション: バックアップからの復元、トランザクション ログからの復元、DBCC CHECKDB の使用、3 番目の使用パーティーツール。データ損失を防ぐために、データベースを定期的にバックアップし、トランザクション ログを有効にしてください。

はい、C++ ラムダ式は std::function を使用して再帰をサポートできます。std::function を使用して Lambda 式への参照をキャプチャします。キャプチャされた参照を使用すると、ラムダ式はそれ自体を再帰的に呼び出すことができます。

SQL Server のインストールが失敗した場合は、次の手順に従ってクリーンアップできます。 SQL Server をアンインストールする レジストリ キーを削除する ファイルとフォルダーを削除する コンピューターを再起動する

次の手順に従って、SQL Server の英語インストールを中国語に変更できます: 対応する言語パックをダウンロードする、SQL Server サービスを停止する、言語パックをインストールする、インスタンス言語を変更する、ユーザー インターフェイス言語を変更する、アプリケーションを再起動する。

MySQL と SQL Server の構文の違いは、主にデータベース オブジェクト、データ型、SQL ステートメント、その他の側面に反映されています。データベース オブジェクトの違いには、ストレージ エンジン、ファイル グループの指定方法、インデックスと制約の作成などが含まれます。データ型の違いには、数値型、文字型、日付と時刻の型の違いが含まれます。 SQL ステートメントの違いは、結果セットの制限、データの挿入、更新および削除の操作などに反映されます。その他の違いには、ID 列、ビュー、ストアド プロシージャの作成方法が含まれます。異なるデータベース システムを使用する際のエラーを回避するには、これらの違いを理解することが重要です。

削除が不完全なために SQL Server を再インストールできない問題は、次の手順に従って解決できます: ファイルとレジストリ エントリを手動で削除する; SQL Server のインストールおよびアンインストール ツールを使用する; サードパーティのアンインストール ツールを使用する; Windows イベント ビューアを確認する; を再起動するコンピューター; SQL Server を再インストールします。
