2012-01-14 11 views
0

複数のSQL問合せを結合してデータベースを呼び出し続ける必要をなくす方法を探しています。私は3つのテーブルを持っています.1つはクラブの詳細があり、もう1つはクラブ施設があり、もう1つはそれらを組み合わせています。最初の列(上記の全てにおいて複数のSQL問合せを1つの文に結合する

T1

id, name, city 
1, curby, London 
2, zoo, Birmingham 

T2

id, facility 
1, bar 
2, function suite 
3, VIP room 

T3

id, club_id, facility_id 
1, 2, 1 
2, 2, 3 
3, 1, 2 
4, 2, 2 

:ここ

は、テーブルの簡易版でありますid)はちょうどユニークです各フィールドがどこに分かれるかを示すためにカンマを使用しています。私は、データベースから取得したいのようなものです:いずれかが任意のアイデアを持っている場合は

1, curby, London, function suite 
2, zoo, Birmingham, bar, VIP room, function suite 

あなたはJOINs上に読み取る必要がある:)

答えて

1

を共有してください。あなたが使用しているものRDMS言いませんでしたが、これは、私は、Oracleで使用したいものです。

SELECT t3.id, t2.name, t2.city, t3.facility 
    FROM t3 
INNER JOIN t2 ON t2.id = t3.facility_id 
INNER JOIN t1 ON t1.id = t3.club_id 
0

OK、そうt1はクラブで、t2はといった施設のリストであり、そしてt3は、施設を割り当てクラブに、そう?

JOIN(INNERまたはOUTER)構文を使用すると、複数のテーブルから一度にデータを取得できます。 OUTER JOINは、親テーブル(t1)にデータが存在し、子テーブル(t2)にはデータが存在しない場合に使用されます。 INNER JOINは、両方のテーブルにデータのあるレコードのみを必要とする場合に使用します。

また、二つのテーブルが結合されているかを示す「ON」句含まれている必要があります:私はより良いものに、あなただったら

SELECT t1.id as club_id, t1.name as club_name, t2.facility as facility_name 
FROM t1 
INNER JOIN t2 ON 
    t2.club_id=t1.id 
INNER JOIN t3 ON 
    t3.id=f2.facility_id 

また、私は実際にテーブルの名前を変更するだろうしテーブルに保持されているデータを表します。

+0

を書くことができます。 –

0

は、名前の変更を検討:

  • Clubst1とそのidclub_idへ。
  • t2~Facilitiesおよびそのid~facility_id;
  • t3~ClubFacilitiesであり、その不要なものは、idである。これは複数のレコードが返されますが、

次に、あなたは(各クラブ施設の組み合わせごとに1つ)

SELECT Clubs.*, facility 
    FROM Clubs 
     NATURAL JOIN Facilities 
     NATURAL JOIN ClubFacilities; 
関連する問題