プロが教える店舗&オフィスのセキュリティ対策術

お力貸してください。

[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もデーターとして認識させたいのですが、うまくいきません。
できれば、新しくテーブルを作ったりしたくないです。
お知恵をかしてください。よろしくおねがいします。

A 回答 (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);

別名を使ったほうが短く記述できます。
別名を使うメリットは記述するのが少し楽になる程度ですので、使わなくても大丈夫です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/28 12:13

サンプルでは


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

この回答への補足

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

補足日時:2006/11/28 10:04
    • good
    • 0

原則、どのRDBでもNULLは結合キーにはならないはずです。


よって単純には無理なので何らかの前処理をしないとだめです。

今考え付くのは、

1)仮想表(oracleでいえばview)を作成する(nullの場合にダミー値をセットするもの)。そしてその仮想表同士で結合する

2)結合するキーとなる項目にnullではなく0或いはダミー値に更新する。

でしょうか。
普通に考えれば結合するキーである以上nullがセットされる自体を避けるべきですし、パフォーマンス上も問題あります。

よって上策は2)、下策は1)となります。
ただどうしてもできないのであれば1)の方法をとるしかないでしょう。

この回答への補足

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

補足日時:2006/11/28 09:52
    • good
    • 0

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以外のデータベースで使えるかどうかは分りませんが、同様の手段で出来るかも。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/28 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A