dポイントプレゼントキャンペーン実施中!

A仕入先テーブル、B受注マスタテーブルがあって、
受注マスタの1レコードに複数の仕入先名がある場合、A、Bのテーブルを使って、クエリを作成するにはどのようにしたらいいでしょうか?

A 回答 (7件)

今度は、仕入先マスタから受注データを参照する場合でしょうか?


念のためですが、これは、前回とは、参照方向が逆になります。
下記のクエリは、基本的に次の条件で動きます。

1.受注テーブルの仕入先コードの数が決まっている。
2.受注テーブルの1レコードに仕入先コードが
 同一のものが存在する可能性がある。
また、条件2がない場合は副問い合わせ(サブクエリー)を使う必要はありません。

副問い合わせ版

SELECT [受注抽出].[仕入先CD], [仕入先TBL].[仕入先名],
[受注抽出].[受注CD],
[受注TBL].[仕入先CD01], [受注TBL].[仕入先CD02],
[受注TBL].[仕入先CD03], [受注TBL].[仕入先CD04]
FROM (
(
SELECT 仕入先TBL.仕入先CD, 受注TBL.受注CD
FROM 仕入先TBL, 受注TBL
WHERE (((受注TBL.仕入先CD01)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD02)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD03)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD04)=[仕入先TBL].[仕入先CD]))
GROUP BY 仕入先TBL.仕入先CD, 受注TBL.受注CD
) As
受注抽出 LEFT JOIN 仕入先TBL
ON [受注抽出].[仕入先CD]=[仕入先TBL].[仕入先CD])
LEFT JOIN 受注TBL
ON [受注抽出].[受注CD]=[受注TBL].[受注CD]

通常版

SELECT 仕入先TBL.仕入先CD,
仕入先TBL.仕入先名, 受注TBL.受注CD,
受注TBL.仕入先CD01, 受注TBL.仕入先CD02,
受注TBL.仕入先CD03, 受注TBL.仕入先CD04
FROM 仕入先TBL, 受注TBL
WHERE (((受注TBL.仕入先CD01)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD02)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD03)=[仕入先TBL].[仕入先CD]))
OR (((受注TBL.仕入先CD04)=[仕入先TBL].[仕入先CD]))

こんな感じです。
参考になるといいですが、クエリを作る場合にどの
テーブルが主体になるかしっかり把握しておいてください。
    • good
    • 0

同じテーブルを違う名前をつけて4つ開くということです。



------------
テーブル名  受注TBL
------------------------------
フィールド  |データ型  |サイズ
-----------+---------+-----
受注CD    テキスト 4
仕入先CD01 テキスト 4
仕入先CD02 テキスト 4
仕入先CD03 テキスト 4
仕入先CD04 テキスト 4

------------
テーブル名  仕入先TBL
------------------------------
フィールド  |データ型  |サイズ
-----------+---------+-----
仕入先CD  テキスト 4
仕入先名   テキスト 30

というテーブル構造だったとします。
下記のクエリで出来ます。


SELECT 受注TBL.受注CD,
受注TBL.仕入先CD01, 仕入先TBL.仕入先名,
受注TBL.仕入先CD02, 仕入先TBL_1.仕入先名,
受注TBL.仕入先CD03, 仕入先TBL_2.仕入先名,
受注TBL.仕入先CD04, 仕入先TBL_3.仕入先名
FROM (((受注TBL LEFT JOIN 仕入先TBL
ON 受注TBL.仕入先CD01 = 仕入先TBL.仕入先CD)
LEFT JOIN 仕入先TBL AS 仕入先TBL_1
ON 受注TBL.仕入先CD02 = 仕入先TBL_1.仕入先CD)
LEFT JOIN 仕入先TBL AS 仕入先TBL_2
ON 受注TBL.仕入先CD03 = 仕入先TBL_2.仕入先CD)
LEFT JOIN 仕入先TBL AS 仕入先TBL_3
ON 受注TBL.仕入先CD04 = 仕入先TBL_3.仕入先CD
    • good
    • 0
この回答へのお礼

ありがとうございます。
コピーとって貼り付けてみました。
この出来上がったクエリには仕入先名のフィールドが4つ出来ますよね
A,B,C,D,E,F,G・・・社と仕入先がある場合、
A社が、仕入先CD01にあるときや、仕入先CD02にあるときがあるわけです。
その場合に仕入先ごとに受注データを表示したいときは、どうしたらいいんでしょうか?
フィールドが一つのときは、パラメータの設定をしてあげればいいと思うんですけど・・・。

お礼日時:2003/03/06 22:05

こんにちは。



間違っていたらごめんなさい。
こんな感じのクエリーでよいと思うのですが・・・


┌────────┐
│B受注マスタ  │    ┌───────────┐
├────────┤    │A仕入れ先マスタ   │
│工事名     │    ├───────────┤
│仕入先CD    ├───→│仕入先CD       │
│仕入先CD2    ├──┐ │仕入先名       │
│仕入先CD3    ├─┐│ └───────────┘
└────────┘ ││ ┌───────────┐
           ││ │A仕入れ先マスタ1   │
           ││ ├───────────┤
           │└→│仕入先CD       │
           │  │仕入先名       │
           │  └───────────┘
           │  ┌───────────┐
           │  │A仕入れ先マスタ2   │
           │  ├───────────┤
           └─→│仕入先CD       │
              │仕入先名       │
              └───────────┘

上の図が見にくい時は、メモ帳などにコピペして下さい。

ではでは・・・
    • good
    • 0

仕入先もマスタでしたか・・・


で、要するに
受注マスタ(受注データ)にある仕入先CDで
仕入先マスタの仕入先名を引っ張りたいということでしょう。

B┬→A1
 ├→A2
 ├→A3
 └→A4

でいいんじゃないでしょうか?

この回答への補足

申し訳ありません。ど素人なんです。
受注データにある仕入先CDで仕入先マスタの仕入先名を引っ張るには、
B(受注) ┬→A1 (仕入先)
      |→A2
     ├→A3
     └→A4

クエリの仕入先名のフィールドは4つ作るんですか?
うまくいきません。
すみません。

リレーションシップの方で設定をしてから、クエリを作ってます。
そうするとクエリの画面でテーブルを表示すると
Bテーブル一つAテーブル一つが出て
仕入先マスタテーブルのフィールド(仕入先CD)から受注データテーブル(仕入先CD、1、2、3)4つ結合が1対多で出てます

結果はエラーになってます。

補足日時:2003/03/05 16:24
    • good
    • 0

横から失礼します。


>受注マスタの1レコードに複数の仕入先名がある場合・・・
とありますが受注マスタに仕入先を入力すると言うのがどういう受注形態なのか
分かりかねますが商品テーブル等はないのでしょうか?
仕入先は商品テーブルにリレーションして受注マスタには商品をぶら下げればその
商品から仕入先をクエリで表示できるのではないでしょうか。

得たい回答と違っているようでしたらゴメンなさい。

この回答への補足

仕入先は1社だけではないということんですけど、
一つの受注に対し、仕入先"A""B""C""D""E"から、複数選ぶいうことです。
大体は同じですが、毎回違うんです。A社から3つ、B社から1つ、C社からはなし・・・・という感じです。
受注マスタという名称はおかしいですね。すみません。

補足日時:2003/03/05 14:13
    • good
    • 0

きっと接続方向が間違ってます。



接続方向は 
この場合 1→多数 じゃないとあいまいな・・・と言われてしまいます。

A┬→B1
 ├→B2
 ├→B3
 └→B4

この回答への補足

A┬→B1
 ├→B2
 ├→B3
 └→B4
で、やってみましたが、結果が間違って出てきます。


A仕入先マスタのフィールドです。↓
仕入先CD仕入先名仕入先住所
101Aあいうえお
102Bかきくけこ
103Cさしすせそ
104Dたちつてと
105Eなにぬねの


B受注マスタのフィールドです。↓
受注番号受注日客先発注番号工事件名仕入先CD仕入先CD2仕入先CD3
1510102001/01/012402-15654ABCEFG101102103
1510202001/01/152402-15653HIJKLMN102101103
1510302002/02/012402-15032SEIKO101104101
B受注マスタのフィールド(仕入先CD仕入先CD2仕入先CD3)

A仕入先マスタのフィールド(仕入先CD)
から参照して仕入先名を表示したいんです。

なんだかうまくいきません。
根本的に間違えていますか?

補足日時:2003/03/05 14:12
    • good
    • 0

>受注マスタの1レコードに複数の仕入先名がある



マスターでしたら、1レコードに1仕入先名にすることを
お勧めします。

質問の答えですが、
クエリーデザイン画面で、Bの仕入先名の数だけ Aテーブルを表示します。で、Bの仕入先名ごとに Aテーブルを1つづつ結びます。
結合プロパティは 
「’B’の全レコードと 'A'の同じ結合フィールドのレコードだけを含める」にします。

この回答への補足

早速チャレンジしてみました。B テーブルを4つ表示して「’B’の全レコードと 'A'の同じ結合フィールドのレコードだけを含める」という結合にしましたが、

あいまいな外部キーが含まれているのでSQLステートメントを実行できません
いずれかの結合を実行するために、第一結合を実行する分割クエリを作成し、SQLステートメントにそのクエリを含めてください。というエラーが出てしまいます。

補足日時:2003/03/05 00:33
    • good
    • 0

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