• ベストアンサー

Null同士の結合

お力貸してください。 [Table111] データA   データB    データC     Name111 Null     1        5         あああ 2       Null      6         いいい 3       4        7         ううう [Table222] データA    データB     データC     Name222 Null      1         5          AAA 2        Null       6          BBB 3        4         7          CCC Table111とtable222をデータAとデータBとデーターCの3つで結合して 新しいテーブルをつくりたいです。 [TableC] データA    データB   データC  Name111   Nam222 Null       1       5      あああ       AAA 2         Null     6      いいい       BBB 3         4       7      ううう       CCC Nullもデーターとして認識させたいのですが、うまくいきません。 できれば、新しくテーブルを作ったりしたくないです。 お知恵をかしてください。よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22650
noname#22650
回答No.4

#1です。 >X・Yというのは? Table111 AS X Table222 AS Y Table111 に別名 X と付けています。 同様に Table222 に Y という別名をつけてます。 別名を使わなかった場合は下のようになります。 SELECT Table111.データA, Table111.データB, Table111.データC, Table111.Name111, Table222.Name222 INTO TableC FROM Table111 INNER JOIN Table222 ON ("" & Table111.データA = "" & Table222.データA) AND ("" & Table111.データB = "" & Table222.データB) AND ("" & Table111.データC = "" & Table222.データC); 別名を使ったほうが短く記述できます。 別名を使うメリットは記述するのが少し楽になる程度ですので、使わなくても大丈夫です。

noname#22811
質問者

お礼

venzoさん、ご回答ありがとうございます。 先ほど、実データで#1の方法を実行してみました。 X・Yの意味を理解していなかったので、テーブルの別名はつけずに記述したのですが、希望通りできました!!! 『""』 をつけるのは目からウロコでした! (もともと、実データーもテキスト型だったので・・・) 本当にありがとうございます。!

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

サンプルでは データA,データB,データCの複数フィールドで主キー(一意な値を持つ)事が 可能のようですが、この後もレコードを追加してゆくと いつかは地雷を踏みそうです (連結3フィールドで重複するレコードが出来てしまう) なので、テーブル設計に立ち返った方が良いように思えます。 「急がば回れ」です。

noname#22811
質問者

補足

ご回答ありがとうございます。 ACCESSを使用してますが、別のアプリケーション(テーブル構造自体違うもの)からインポートしているため、テーブルの構造を変更ですることができないんです・・・。 また、お力を貸していただければ・・・と思います。

  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.2

原則、どのRDBでもNULLは結合キーにはならないはずです。 よって単純には無理なので何らかの前処理をしないとだめです。 今考え付くのは、 1)仮想表(oracleでいえばview)を作成する(nullの場合にダミー値をセットするもの)。そしてその仮想表同士で結合する 2)結合するキーとなる項目にnullではなく0或いはダミー値に更新する。 でしょうか。 普通に考えれば結合するキーである以上nullがセットされる自体を避けるべきですし、パフォーマンス上も問題あります。 よって上策は2)、下策は1)となります。 ただどうしてもできないのであれば1)の方法をとるしかないでしょう。

noname#22811
質問者

補足

ご回答ありがとうございます。 Accessを仕様しているのですが、Replace関数等を使って、Nullを、0か1に変換させようと思ったのですが、(SQL文で一発で実行させたい)うまくいかきません。 まだまだ、初心者で勉強中なのですが・・・。 『結合するキーである以上nullがセットされる自体を避けるべき』 その通りなのですが、データーの構造上、どうしても避けられないんです。 また、お力を貸していただければ・・・と思います。

noname#22650
noname#22650
回答No.1

Access2000で確認しました。 SELECT X.データA, X.データB, X.データC, X.Name111, Y.Name222 INTO TableC FROM Table111 AS X INNER JOIN Table222 AS Y ON ("" & X.データA = "" & Y.データA) AND ("" & X.データB = "" & Y.データB) AND ("" & X.データC = "" & Y.データC); このクエリでTableCに3レコード追加できます。 ポイントは "" & X.データA とすることで強制的に文字列として比較しています。 データがNullの場合 "" & X.データA は ""(ヌル文字)となります。 "" & X.データA の代わりに Nz(X.データA,"") でも同様の結果になります。 Access以外のデータベースで使えるかどうかは分りませんが、同様の手段で出来るかも。

noname#22811
質問者

お礼

ご回答ありがとうございます。 SELECT X.データA, X.データB, X.データC・・・・の X・Yというのは? すみません・・・ まだまだ、初心者で勉強中なんです・・・

関連するQ&A