プロが教えるわが家の防犯対策術!

AccessMDBで、以下のテーブルがあったとします。

テーブル1
ID,NAME
1,おなまえ
2,名前
3,なまえ

テーブル2
ID,DB1_ID,NAME,開始日,終了日
1,1,4月,2006/4/1,2006/4/30
2,1,6月,2006/6/1,2006/6/30
3,2,2006年度,2006/4/1,2007/3/31

このとき、以下のように出力したいのですが
ID(オートナンバーと仮定),NAME,月,開始日,終了日
1,おなまえ,4月,2006/4/1,2006/4/30
2,おなまえ,6月,2006/6/1,2006/6/30
3,おなまえ,(null),(null),(null)
4,名前,2006年度,2006/4/1,2007/3/31
5,名前,(null),(null),(null)
6,なまえ,(null),(null),(null)

試しにクェリーを作ってみた所、(null)の値を手入力しなければいけないのですが
nullをいれさせるようにするには、どのようにしないといけないでしょうか?

#テーブルをいじることはできず、SQLのみで対処することを考えています。

SELECT テーブル1.NAME, テーブル2.NAME, テーブル2.START, テーブル2.END
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.ID=テーブル2.DB1_ID
UNION SELECT テーブル1.NAME, テーブル2.NAME,テーブル2.START,テーブル2.END
FROM テーブル1;

よろしくお願いします。

A 回答 (4件)

UNIONの後のSELECT文ではテーブル2の値は不要なのではないでしょうか?


これでどうでしょう?

(SELECT テーブル1.NAME, テーブル2.NAME, テーブル2.START, テーブル2.END
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.ID=テーブル2.DB1_ID )
UNION
SELECT NAME,null,null,null from テーブル1;
    • good
    • 0
この回答へのお礼

このままそっくりコピペして通りました。
ありがとうございます。

早速組み込んでみたいとおもいます。

お礼日時:2006/06/05 22:17

Accessのmdbならこんな感じでSQL発行できませんでしょうか。



SELECT テーブル1.NAME, テーブル2.NAME, テーブル2.開始日, テーブル2.終了日
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.ID=テーブル2.DB1_ID
UNION SELECT テーブル1.NAME, (IIf(IsNull(テーブル2.NAME),"Null",テーブル2.NAME)) AS N,(IIf(IsNull(テーブル2.開始日),"Null",テーブル2.開始日)) AS S,(IIf(IsNull(テーブル2.終了日),"Null",テーブル2.終了日)) AS E
FROM テーブル1;

これでほぼ近いと思うのですが。

この回答への補足

やはり、入力ダイアログが出てしまいます。

補足日時:2006/06/05 22:15
    • good
    • 0

そういう場合はご自分ローカルPCにデータをコピーしましょう。


それからデータを加工すればいいのでは?・・・
とにかく抽出してデータを抜き出す工夫をして別なmdbもしくは
MSDEなどにDBを作成すればOKだと思いますが。
そのほかEXCELに読み込んで加工するなどの方法もありますが

この回答への補足

うーん、そういうわけにもいきません。
また、毎月1回、うん万件が素人が動かすシステムに組み込みますので・・・

その関係で、新たなテーブルも作れない状態です。

補足日時:2006/06/05 06:49
    • good
    • 0

Insert INTO を用いて別テーブルへ追加すれば可能です。



STEP(1):
TABLE_1 の定義内容が

ID (オートナンバー型) 主キー
DB1_ID (INT型)
氏名(テキスト型)
名称(テキスト型)
開始日(日付・時刻型)
終了日(日付・時刻型)

としてデータを入れます。

STEP(2):
TABLE_2 の定義内容が
ID (オートナンバー型) 主キー
氏名(テキスト型)

としてデータを入れます。

STEP(3):
あらかじめ出力先テーブル(TABLE_3)を作成します。
ID (オートナンバー型) 主キー
氏名(テキスト型)
名称(テキスト型)
開始日(日付・時刻型)
終了日(日付・時刻型)

データは空にしておきます。

STEP(4):
追加クエリ「TABLE_1からTABLE_3作成」という名前で作成します。
INSERT INTO TABLE_3 ( 氏名, 名称, 開始日, 終了日 )
SELECT Table_1.氏名, Table_2.名称, Table_2.開始日, Table_2.終了日
FROM Table_2 LEFT JOIN Table_1 ON Table_2.DB1_ID = Table_1.Id
ORDER BY Table_2.ID;

STEP(5):
追加クエリ「TABLE_1からTABLE_3作成」という名前で作成します。
Insert INTO TABLE_3(氏名, 名称, 開始日, 終了日)
SELECT Table_1.氏名, NULL as 名称,NULL as 開始日,NULL as 終了日
FROM Table_1 where ID in(2,3)
order by ID

後は作成した追加クエリ(STEP(4),STEP(5))を実行すれば結果が TABLE_3 に作成されます。

自動化するにはマクロもしくはVBAを作成する必要があります。

この回答への補足

すみません。
テンポラリ用のテーブルの作成がダメなのも条件です。

#実際に動作するのは非常に大規模なmdbで、テーブル定義等を変更するのはほぼ困難であり、かつ、CREATE の権限が無い状態になっています。

補足日時:2006/06/05 03:55
    • good
    • 0

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