2017-09-11 26 views
0

私は4つのテーブル:A、B、Cとリンクテーブルを持っています。 AとBをリンクするリンクテーブルにレコードがあり、BとCのリンクテーブルに別のレコードがあるAに条件を設定してCからレコードを取り出すことができるかどうかを知りたいです。MS Accessのクエリ結果 - リレーションシップエクステンション

Here's a simplified image of the relationships

IがAに設定された基準を用いて連結テーブルがクエリに存在する、A、B及びCから関連フィールドを示すクエリーを設定しようとしている:ここ

は関係の簡略化された画像です。クエリを実行すると、Bからのリンクされたレコードのみが返されます.Cのリンクされたフィールドに条件を入力する必要がありますか? (私はクエリのデザインビューでこれをやっています - 私の知識SQLは限られています)

Relationshipです。 Accessから

SQL:

SELECT Fruits.Fruit, Colour.Colour, Pests.Pest 
FROM Pests RIGHT JOIN (Fruits RIGHT JOIN (Colour RIGHT JOIN [Linking Table] ON Colour.ID = [Linking Table].Colour) ON Fruits.ID = [Linking Table].Fruit) ON Pests.ID = [Linking Table].Pest 
WHERE (((Pests.Pest)="Fly")); 

入力:フライ

出力:アップル

所望の出力:アップルとレッド

リンクテーブルには、果物のIDをリンクレコードを持っています害虫への、そして果物のIDと色を結びつける別々の記録。

ご協力いただきまして誠にありがとうございます。

+0

の色に詳細を記入してください。あなたの質問に答えるのを助けるために、あなたの関係の中の列の名前と、SQL、入力、実際の出力、および望ましい出力を照会したいと思います。 –

+0

私は要求された詳細を追加しました。ありがとう。 –

答えて

0

リンクテーブルを2種類のリンクに使用しています。これは悪い習慣です(正規化では、表のすべての列が関連していなければならず、列の害虫は列の色とは関係ありません)。 1つの表を使って色を果物にリンクさせ、1つの表を果物にリンクさせる方が良い計画になります。

あなたがしたい場合は、まだこれを使用することができますが、二回リンクテーブルに参加する必要があります(一度の果物のために - 一度の果物のために、関係を害虫 - 色の関係)

次のクエリを試してみてください。

SELECT Fruits.Fruit, Colour.Colour, Pests.Pest 
FROM Pests 
INNER JOIN [Linking Table] AS LT1 ON Pests.ID = LT1.Pest 
INNER JOIN Fruits ON LT1.Fruit = Fruits.ID 
INNER JOIN [Linking Table] AS LT2 ON Fruits.ID = LT2.Fruit 
INNER JOIN Colour ON LT2.Colour = Colour.ID 

このクエリは、テーブルのリンクの2番目のインスタンスに、その後の果物にテーブルをリンクにペストから行き、その後

+0

これはうまくいきましたが、コードの5行目には、Fruits.ID = Fruit.IDがあります.Fruits.ID = LT2.Fruitである必要があります。ありがとう。 –

関連する問題