このエントリーをはてなブックマークに追加


サブクエリ結果同士をLEFT JOINしてみる

本資料は、クエリ結果を別のクエリ結果とLEFT JOINするサンプル構文を以下に記します。
クエリ結果にNULLレコードを追加するLEFT JOINサンプルとなります。

動作確認環境

SELECT @@VERSION
Microsoft SQL Server 2019 (RTM-GDR) (KB5021125) - 15.0.2101.7 (X64)   Jan 23 2023 13:08:05   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19045: ) 

テストテーブルおよびテストデータ

以下のテストテーブルとテストデータで動作確認を行いました。

CREATE TABLE m1
(
	 id int
	,ostype varchar(20)
	,live bit
)
CREATE TABLE t1
(
	 id int
	,PCs int
)
INSERT INTO m1
VALUES
 (1,'Symbian',0)
,(2,'NeXTSTEP',0)
,(3,'OS/2',0)
,(4,'BeOS',0)
,(5,'Windows',1)
,(6,'macOS',1)
,(7,'Linux',1)
,(8,'iOS',1)
,(9,'Android',1)
,(10,'FreeBSD',1)
INSERT INTO t1
VALUES
 (5,100)
,(6,10)
,(7,1)

サブクエリとサブクエリのLEFT JOIN

2つのテーブルをLEFT JOINする場合は以下のようになります。

テーブル同士をLEFT JOINした場合

以下、m1(マスタ)とt1を LEFT JOIN し場合のSQLとなります。

SELECT
	 m1.id
	,m1.ostype
	,t1.PCs
FROM
    m1
	LEFT JOIN t1 on m1.id = t1.id

実行結果

idostypePCs
1SymbianNULL
2NeXTSTEPNULL
3OS/2NULL
4BeOSNULL
5Windows100
6macOS10
7Linux1
8iOSNULL
9AndroidNULL
10FreeBSDNULL

両方のテーブルをクエリしLEFT JOIN する

上記のSQLのSQL の m1とt1部分をサブクエリにします。

SELECT
	 M.id
	,M.ostype
	,T.PCs
FROM
    (SELECT * FROM m1 WHERE live = 1) M
	LEFT JOIN 
		(SELECT * FROM t1 WHERE PCs >= 10) T
	ON M.id = T.id

m1とt2部分をサブクエリにし、MとTとして別名を設定しています。

実行結果

idostypePCs
5Windows100
6macOS10
7LinuxNULL
8iOSNULL
9AndroidNULL
10FreeBSDNULL

以上、サブクエリ同士をLEFT JOIN するサンプル記事でした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-02 (火) 17:16:45