質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

3015閲覧

Access 部分一致リレーションシップ

tkyk.

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/04/04 08:36

Access 部分一致リレーションシップについて質問です。

売上一覧と仕入一覧の各テーブルがあります。

売上一覧の伝票Noと仕入一覧の伝票Noでリレーションシップを築きたいのですが
仕入一覧の伝票Noだけ一桁多いのです。

【例】
◆売上一覧
売上先:A株式会社
商品:りんご、みかん
伝票No.10010

◇仕入一覧
りんご仕入先:B株式会社 伝票No.100101
みかん仕入先:C株式会社 伝票No.100102

上記のように売上先はひとつに対して仕入先は商品毎に複数存在するため仕入の伝票Noが一桁多い状況です。
売上一覧と仕入一覧をひとつのテーブルにまとめたいのですがリレーションシップなど築いて出来るのでしょうか。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のようなSQLで可能です。
ただし、更新できないクエリにできますし、インデックスか無効になるのでデータ数が多いと重いです。

sql

1SELECT 2 a.*, 3 b.仕入先 4FROM 5 売上一覧 a INNER JOIN 仕入一覧 b 6 ON a.伝票No = Left(b.伝票No,5);

可能なら、仕入一覧の伝票No は、伝票No(5桁)と 伝票No子番(1桁) に分割すべきです。


コメントより

上記のように仕入先の伝票No.は売上先の伝票No.と同じですが

仕入先が複数ある場合のみ伝票No.2として下一桁を追加している状態です。
ですので仕入先がひとつの場合は伝票No.2は空欄です。

ひょっとして現状のテーブルは下記のようになっているといことでしょうか。

売上一覧

売上先商品伝票No
A株式会社りんご、みかん10010

仕入一覧

仕入先伝票No伝票No2
B株式会社10010100101
C株式会社10010100102

こうだとしたら、テーブル設計が間違ってますね。下記のような設計にすべきです。

売上一覧

売上先伝票No
A株式会社10010

売上明細

伝票No明細No商品仕入先
100101りんごB株式会社
100102みかんC株式会社

厳密にいえば、上記から、さらに 商品マスター、売上先マスター、仕入先マスター のテーブルを作成すべきです。
このような設計を「テーブルの正規化」といい、リレーショナルデータベースでは正規化されていないテーブルは使い物になりません。

投稿2020/04/04 09:26

編集2020/04/04 11:04
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyk.

2020/04/04 09:55

hatena19様 この度も教えていただきありがとうございます! 私の言葉足らずで申し訳ありません。 実はもう少し複雑な一覧表でして・・・ ◆売上一覧 売上先:A株式会社 商品:りんご、みかん 伝票No.10010 ◇仕入一覧 りんご仕入先:B株式会社 伝票No.10010  伝票No.2 100101 みかん仕入先:C株式会社 伝票No.10010   伝票No.2 100102 上記のように仕入先の伝票No.は売上先の伝票No.と同じですが 仕入先が複数ある場合のみ伝票No.2として下一桁を追加している状態です。 ですので仕入先がひとつの場合は伝票No.2は空欄です。 伝票No.のみでリレーションシップを築くと仕入先が複数ある場合の仕入先の表示がおかしくなってしまいます。 何かいい方法ありましたら教えていただければ幸いです。 分かりにくい質問で申し訳ありません。
tkyk.

2020/04/04 11:29

hatena19様 まさに上に書いていただいた通りの売上一覧と仕入一覧のテーブルです。 テーブルの正規化というのは初めて知ったので調べてやってみます。 伝票No.2の下1桁を別の列に分割すれば良いのでしょうか。 また質問させていただくかもしれませんがその際は宜しくお願い申し上げます。
hatena19

2020/04/04 11:36

> 伝票No.2の下1桁を別の列に分割すれば良いのでしょうか。 そうですね。回答の設計例ですと、明細No です。 「テーブル 正規化」で検索すると解説ページがいろいろ見つかりますので、分かり安そうなページで学習してください。一度にすべて理解するのは難しいのでとりあえず半分ぐらい理解できればいいです。そのうちだんだんわかってきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問