結合について
はじめに
「無効なクエリ」エラーと行の重複で最もよく見られる理由の1つが、SQLでデータが適切に結合できていない、つまり本質的には結合の機能に関する理解が不足していることにあります。次の記事では、SQLを使用してデータを結合する際に必要となる知識について説明します。これらの知識があれば、今後、同様の無効なクエリエラーや行の重複の問題を回避できます。
動画
次のモーショングラフィックビデオを見て、Domoでのデータの追加と結合について理解してください。
使用事例
SQLの結合は、2つのテーブルを結合するためのものであり、通常は、列を追加するときに使用されます。結合は、2つのテーブルを固有の列で組み合わせる機能を持ちます。2つのテーブルを結合する方法は、使用する結合のタイプによって決まります。
例えば、毎日の販売数を示すテーブル(テーブル1を参照)と、それぞれの日に働いた従業員の数を示すテーブル(テーブル2を参照)があるときに、特定の日に働いた従業員の数とそれぞれの日の売上数を比較するとします。左の完全外部結合を使用して、2つのテーブルを結合します(日付と日付を合わせます)。テーブル1と一致する日付を持つテーブル2の行は、テーブル1の同じ行に結合されます。したがって、テーブル3のように、日付、毎日の売上、働いた従業員の数がすべて同じテーブルにまとめられます。
このDataSetをDomoに取り込んだ場合は、エラーは発生しません。
テーブル1. 1日あたりの売上
日付 |
売上 |
---|---|
2016-05-14 |
100 |
2016-05-15 |
200 |
2016-05-16 |
300 |
2016-05-17 |
400 |
テーブル2. 1日あたりの働いた従業員の数
日付 |
働いた従業員の数 |
---|---|
2016-05-14 |
10 |
2016-05-15 |
15 |
2016-05-16 |
20 |
2016-05-17 |
25 |
テーブル3. 1日あたりの売上と働いた従業員の数
日付 |
売上 |
働いた従業員の数 |
---|---|---|
2016-05-14 |
100 |
10 |
2016-05-15 |
200 |
15 |
2016-05-16 |
300 |
20 |
2016-05-17 |
400 |
25 |
重複を防ぐ
重複は、結合を固有の列で実行していない場合に発生します。テーブル4と5を見てみましょう。先ほどのテーブル1と2に似ていますが、ここでは両方のテーブルに同じ日付2016-05-17の行が2つあります。再び日付一致で左外部結合を実行すると、テーブル5の各行がテーブル4の一致する行にすべて結合されますが、この場合は、結合によって生成されたDataSetには4行の日付が重複しています(テーブル6を参照)。
テーブル4. 1日あたりの売上
日付 |
売上 |
---|---|
2016-05-14 |
100 |
2016-05-15 |
200 |
2016-05-16 |
300 |
2016-05-17 |
400 |
2016-05-17 |
450 |
テーブル5. 1日あたりの働いた従業員の数
日付 |
働いた従業員の数 |
---|---|
2016-05-14 |
10 |
2016-05-15 |
15 |
2016-05-16 |
20 |
2016-05-17 |
25 |
2016-05-17 |
26 |
テーブル6. 1日あたりの売上と働いた従業員の数
日付 |
売上 |
働いた従業員の数 |
---|---|---|
2016-05-14 |
100 |
10 |
2016-05-15 |
200 |
15 |
2016-05-16 |
300 |
20 |
2016-05-17 |
400 |
25 |
2016-05-17 |
400 |
26 |
2016-05-17 |
450 |
25 |
2016-05-17 |
450 |
26 |
このような日付の重複を避けるには、常に固有の列で結合を行う必要があります。
結合のタイプの概要
また、ユーザーが誤って理解しているものの中に、結合のタイプがあります。結合のタイプによってDataSet内のどの行が影響を受けるのかについては、次の図を参照してください。
左の外部結合
右の外部結合
内部結合
完全外部結合
要約すると、適切なタイプの結合を適用し、DataSetでの表示方法に合わせて、同じ列タイプまたは列設定を一致させてください。
回避すべき結合エラー
- 文字列が値と等しいときの結合。
- 空の文字列値を持つ列の結合。
- 日付のように見えるが、何らかの理由で文字列として入力されている結合対象の列での日付関数の実行。