2017-01-31 20 views
1

Microsoft Accessで作業しています。SQLアクセス:2つのテーブル間の複数の内部結合

プロダクションと試薬の2つのテーブルがあります。

Reagents 
- Reagent Reference ID (text) 
- Supplier (text) 

Production 
- Production Reference ID (text) 
- C Reference ID (text) (matches Reagents.Reagent Reference ID) 
- P Reference ID (text) (matches Reagents.Reagent Reference ID) 

私は以下のように、(生産から)生産リファレンスIDへ(試薬から)CとPのサプライヤーをリンクするために、クエリを構築しようとしています。

Query Output 
- Production Reference ID 
- C Supplier 
- P Supplier 

以下は私がこれまでに持っていたものですが、私には演算子がありません。

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.Reagent Reference ID=Production.C Reference ID 
INNER JOIN Reagents AS P ON P.Reagent Reagent Reference ID=Production.P Reference ID 
WHERE Production.Production Reference ID=? 

ありがとうございます!

+0

C参照IDとP参照IDは同じですか? – Magisch

+0

C参照IDはC00001の行にあり、P参照IDはP00001の行にあり、PとCは決して一致しません。 P Reference IDとC Reference Reference IDの両方がReagent Reference IDの下に含まれています。 –

+0

厳密に結合が必要なのかどうかはわかりませんが、私は以下のサブクエリを使って解を与えました。私は自分のアクセスデータベース上の同様のテーブルでそれをテストし、それがうまくいった。数千レコードを超えても条件がない場合は遅くなることに注意してください – Magisch

答えて

2

あなたは(これは、サブクエリを使用している、テーブルが大きい場合、それは多少遅くなることがあり、注意してください)この方法を試すことができます。

SELECT Production.[Production Reference ID], 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[C Reference ID]) as CSupplier, 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[P Reference ID]) as PSupplier 
FROM Production; 

編集:いくつかのテストでは、私はそれがどのように動作するかを発見中には、あまりにも、JOIN、それははるかに高速方法1その後です:1クエリでJOINをもっとして使用した場合

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM (Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number]) 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 

MS Accessの括弧が必要です。

+0

これは完全に私のために働く - テーブルは決して大きくなることはないので、近い将来このテーブルでうまくいくはずです。どうもありがとう! –

+0

@JamesBoxall投票の横にある緑色のチェックマークをクリックすると、あなたの答えの1つを受け入れることができます。また、私はあなたが適切なカッコを置くとStefanの答えがうまくいくと思います(アクセスは非常に難しいです)。 – Magisch

+0

@JamesBoxall私もJOIN版を見つけました、かっこが足りませんでした。これも高速です。 – Magisch

0

以下のように、括弧[]でフィールド名をカプセル化してみてください。

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number] 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 
+0

これはうまくいくはずですが、エラーが表示されます: クエリ式の構文エラー(演算子がありません) '[Reagent Reference Number ] =生産。[C参照番号] インナー・ジョイン・試薬AS P ON P。[試薬試薬参照番号] =製造。[P参照番号 '。 –

+0

よくある間違いがあります。 1つ以上のJOINを使用する場合は、括弧が必要です。 – Magisch

+0

以下のように、最初の内部結合のまわりに括弧が必要でした。 FROM(製造番号 INNER JOIN試薬C C ON C. [試薬参照番号] =製造番号[C参照番号])INNER JOIN ... 場所、これは素晴らしい作品! - お詫びMagisch、ちょうどあなたのコメントに気づいた! –

関連する問題