• ベストアンサー

空白があるとクエリで表示されない

アクセスで設備の修理履歴を管理するデータベースを作成しています。 修理履歴テーブルがあり、その他、 実施区分、設備、修理タイプ、 処置区分、トラブルコードはそれぞれテーブルを作成し、 リレーションシップを組んでいます。 T_修理履歴 修理ID(オートナンバー) 発生日 実施区分ID 担当者 設備ID 作業時間 修理タイプID 処置区分ID トラブルコードID T_実施区分 実施区分ID  001   002 実施区分名  実施済 未実施 T_修理タイプ 修理タイプID  001  002 修理タイプ  突発  予防 他のテーブルも同様に作成しています。 修理依頼を受け、修理ID~設備IDまでを入力、 修理を実施した後、作業時間~トラブルコードまでを入力する形式を 取りたいのですが、作業時間から下が空白のままだと、 未実施データを抽出するクエリを作成しても、 データが表示されません。 リレーションシップに問題があるのでしょうか? ご指導よろしくお願い致します。  

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

  • ベストアンサー
  • trinker
  • ベストアンサー率73% (14/19)
回答No.1

こんにちは! T_修理履歴とT_修理タイプは直積結合になっているのでしょうか? その場合、T_修理タイプに存在しない修理タイプ(空白)のレコードは表示されないと思います。 デザイナーを使っている場合は T_修理履歴とT_修理タイプを繋いでいる線を右クリックして 「結合プロパティ」を表示し、「「T_修理履歴」の全レコードと「T_修理タイプ」の同じ結合フィールドのレコードだけを含める」を選択してOKです。 もしくは単純に「未修理」というようなステータスを追加するのでも構わないと思います。

cuxxx
質問者

お礼

ご指導ありがとうございます。 無事に表示できました。 ありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

INNER JOIN だから 例えば、T_修理履歴から見て、T_修理タイプを LEFT JOIN にしておけば、相手がいなくても 表示されます。 つまり、「INNER JOIN」とは両方とも存在して いる場合という意味です。「LEFT JOIN」とは 左側に記述したテーブルが優先で、右側に記述 した方のテーブルのデータは存在しなくても良い という意味です。 SQLビューにすると、以下のような感じです。 FROM T_修理履歴 LEFT JOIN T_修理タイプ ON T_修理履歴.修理タイプID=T_修理タイプ.修理タイプID クエリビルダで見ると、テーブルのフィールド間を 結ぶ線が直線になっていれば「INNER JOIN」です。 この線をダブルクリックして、結合条件を変更します。 T_修理履歴→T_修理タイプのように矢印になればOKです。 尚、一部DBシステムではNullという値からJOINすると、 エラーになるものもありますが、Accessは大丈夫です。

cuxxx
質問者

お礼

ご指導ありがとうございます。 勉強になりました。 ありがとうございました。

関連するQ&A