
こんにちわ、マツコ先生 です。
「クエリをマージ(結合)する方法」でお困りではないでしょうか?
本記事でそんなお悩みを解決していきますよ!
本記事を読むことで |
---|
・1つまたは複数の列をキーに2つのクエリをマージ(結合)できる |
本記事はクエリを横方向に結合(追加)する場合のご説明になります。
クエリを縦方向に結合(追加)したい場合は、こちらの記事を参照願います。
マージ(結合)する際のポイント
- どの列をキーにしてマージ(結合)するか決める
- マージするクエリ(追加するクエリ)には、同一キーのものが複数あるか否か確認する
- マージするクエリ(追加するクエリ)には、全ての種類のキーが含まれているか確認する
一つの列をキーにマージ(結合)する
サンプルとして、次のような売上のデータに、商品の産地情報を追加してみましょう。

商品毎の産地情報は、"産地"クエリとして別テーブルを取り込んでいます。

元にする "売上_日次"クエリを選択した状態で、
上のメニューから "ホーム を選択し、”クエリのマージ" のアイコンをクリックし、"クエリのマージ"を選択します。

"マージ" の設定画面が表示されると思います。
上段で選択されているクエリ(①のところ)が "売上_日次" であることを確認します。

次いで、下段でクエリ(②のところ)に "産地"を選択します。
最後にマージ(結合)のキーとなる列を選択しします。今回は、商品をキーにマージ(結合)したいので それぞれの "品名" を選択状態とします。

"結合の種類" については、"左外部" を選択します。これは①のクエリの行を全て残しながら、キーが一致する行に②のクエリ情報を追加した場合に選択する。他の選択肢については、別途ご説明しますので今回は省略します。

"OK" をクリックすると、"売上_日次"のクエリに"産地"列が追加されているのを確認できると思います。

"産地" 列には、まだ情報が表示されていないので、どの情報を表示するかの設定をします。
"産地" 列の右端にある展開アイコンをクリックすると "産地" のクエリにある列名一覧が表示されます。

"産地" のクエリのうち、表示したい列のみチェックBOXをオンにして "OK” をクリックします。今回は、"産地" 列のみ表示したいので、"産地" のみチェックBOXをオンにします。

"OK" をクリックすると、"産地" 列が追加されていることが確認できます。

複数の列をキーにマージ(結合)する
"マージ" の設定画面 において、複数の列をキーにマージ(結合)したい場合、"shift" キー を押しながら、クリックをしていくと複数列を選択することができます。このとき、選択した順番に次のように番号が表示されます。上段と下段、各々で選択した列の番号が一致する列について値の一致が確認されます。

1つのキーに対し、複数の行がある場合のマージ(結合)
仮に、"産地"のクエリに一つのキーに対し、複数の行がある場合、どうなるかご説明しましょう。
"りんご" について、青森と長野、2つの産地を設定します。

マージ(結合)をした直後は、変化はありませんが、、、

"展開" をすると、番号1の売上情報が2行に増加しています。しかし、産地の列を見ると、青森と長野とで異なっています。このように、一つのキーに対し、複数行があるクエリをマージ(結合)すると、予期せずデータが複製されてしまうおそれがあるので注意しましょう。

あるキーについて、該当する行がない場合のマージ(結合)
仮に、"産地"のクエリにあるキーについて、該当する行がない場合、どうなるかご説明しましょう。
"産地" のクエリに "りんご" の行がない状態とします。

マージ(結合)をした直後は、変化はありませんが、、、

"展開" をすると、"りんご" の売上情報について、"産地" の列には、情報がないことを示す "null" が表示されていることが確認できます。

まとめ
今回は「クエリをマージ(結合)する方法」をご説明しました。
商品の詳細情報など、一覧管理すべき情報を、売上情報などの同じ品名が繰り返し発生するクエリに記載してしまうと、メンテナンスやデータサイズの観点から非効率です。そのため、今回のように別クエリとして管理して、集計時にマージ(結合)することが望ましいです。
なお、マージ(結合)する際のポイントを決める必要があることに留意しましょう。
- どの列をキーにしてマージ(結合)するか決める
- マージするクエリ(追加するクエリ)には、同一キーのものが複数あるか否か確認する
- マージするクエリ(追加するクエリ)には、全ての種類のキーが含まれているか確認する
また、以下の記事もお困りの問題を解決するヒントになるかもしれないので、ぜひ参考にしてみてください!