#author("2023-05-02T17:16:45+09:00","","")
#navi(../)
* サブクエリ結果同士をLEFT JOINしてみる [#p482eb2f]
本資料は、クエリ結果を別のクエリ結果とLEFT JOINするサンプル構文を以下に記します。~
クエリ結果にNULLレコードを追加するLEFT JOINサンプルとなります。
#contents
* 動作確認環境 [#gf1c8cf4]
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: )
* テストテーブルおよびテストデータ [#fa249588]
以下のテストテーブルとテストデータで動作確認を行いました。
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 [#p1fb6cbd]
2つのテーブルをLEFT JOINする場合は以下のようになります。
** テーブル同士をLEFT JOINした場合 [#yfc25963]
以下、m1(マスタ)とt1を LEFT JOIN し場合のSQLとなります。
SELECT
m1.id
,m1.ostype
,t1.PCs
FROM
m1
LEFT JOIN t1 on m1.id = t1.id
実行結果
|id|ostype|PCs|h
|1|Symbian|NULL|
|2|NeXTSTEP|NULL|
|3|OS/2|NULL|
|4|BeOS|NULL|
|5|Windows|100|
|6|macOS|10|
|7|Linux|1|
|8|iOS|NULL|
|9|Android|NULL|
|10|FreeBSD|NULL|
** 両方のテーブルをクエリしLEFT JOIN する [#sda235c0]
上記の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として別名を設定しています。
実行結果
|id|ostype|PCs|h
|5|Windows|100|
|6|macOS|10|
|7|Linux|NULL|
|8|iOS|NULL|
|9|Android|NULL|
|10|FreeBSD|NULL|
以上、サブクエリ同士をLEFT JOIN するサンプル記事でした。