子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【SQL】【SQL Server】結合して抽出しているテーブルの元データを分かりやすく取る方法

結合して抽出しているテーブルの元データを分かりやすく取る方法についてです。

ちょっとこれだけだと分かりにくいので補足説明。

例えばテーブルwork1、work2があって結合してデータを抽出している。
その際に、抽出できるwork1とwork2の元データをそれぞれ取り出したい。

そんなの簡単。結合して抽出するSQLのSELECTでアスター(*)つければ全部取れるじゃんって思うだろうけど、そうじゃない。

なぜなら、テーブルの列の数が増えれば増えるほどwork1とwork2の列の区切りが分かりにくい。
(例えばwork1が100列あって、work2も100列あったらすぐにどこが区切りか分からない。)
また、結合するテーブルが増えると余計分かりにくい。
(1、2テーブルの結合だとまあなんとか大丈夫だけど、10テーブルとか結合しているときつい。)

という問題を抱えている。

そういった問題を解決する方法を考えてみた。

早速SQLです。

CREATE TABLE #work1
(id int
 ,name varchar(10)
);

CREATE TABLE #work2
(id int
 ,name varchar(10)
);

INSERT INTO #work1
    ([id], [name])
VALUES
    (1, 'test1');
 INSERT INTO #work1
    ([id], [name])
VALUES
    (2, 'test2');

INSERT INTO #work2
    ([id], [name])
VALUES
    (1, 'test12');
    INSERT INTO #work2
    ([id], [name])
VALUES
    (2, 'test22');
    
  SELECT 'work1|' AS 'work1|',#work1.*,'work2|' AS 'work2|',#work2.* 
  FROM #work1 
  INNER JOIN #work2 
  ON #work1.id = #work2.id

実行結果
f:id:STSA:20201125223226p:plain


ポイントは2つある。
1つめは抽出結果の中にテーブル名と区切り文字(|)を出力するようにして、テーブルとテーブルの区切り目がわかりやすいようにした。
2つめはテーブル名.*で、対象テーブルの列を全て取るようにしてシンプルにしている。

こうすることにより、結合して出力されたテーブルの元データを分かりやすく抽出できる。

以上!!