2016-05-26 20 views
1

4つのテーブルを結合しようとしています。私のクエリはうまくいかないようです。私がしたいのは、2016年以前に借りた人の電子メールアドレスをすべて見つけることです。私たちのデータベース構造は変更されているので、テーブルパッケージに参加する必要があります。4つのテーブルを結合するSQL

  • のuser_id
  • 活動
  • メールここ

私のコードです::すべてのヘルプは

SELECT 
u.id, 
activities, 
Max(DATE_PART('year', b.created_at)), 
u.email 
FROM boats bts 
INNER JOIN packages p ON p.boat_id = bts.id 
INNER JOIN bookings b ON b.package_id = p.id 
INNER JOIN users u ON u.booking_id = b.id 
WHERE b.created_at BETWEEN '2013-01-01' AND '2015-12-30' 
GROUP BY u.id, activities 
LIMIT 100; 

を高く評価しているが、私は、次の列が出力されるようにしたいです。

+1

INNER JOINをユーザU ON p.boat_id = bts.id ...この行が問題になります。..彼らは右の列に加わっていますか?また、テーブル構造は何ですか?また、ursの現在の出力は何ですか? – DriLLFreAK100

+0

詳細については 'クエリーは動作していないようです 'と説明してください。どのようなDB構造、どの出力が得られ、どの出力が期待されるか – Justinas

+0

ユーザーテーブルは他のテーブルにマップされていません。あなたは正しい結果を得られません。すべての4つのテーブルのDB構造を共有します。 –

答えて

0

あなたが文を変更する必要があります: -

INNERはあなたのクエリでp.boat_id = bts.id

上のユーザーuを登録しよう。 A usersテーブルに参加するあなたは間違っ

INNER JOIN users u ON u.booking_id = b.id 

本当にユーザーテーブルは予約への外部キーを持っていますに参加しているように見え結合文

1

でテーブルの列を含める必要がありますか?通常、それは私が推測している周囲の道になります。

INNER JOIN users u ON u.id= b.user_id 

ピーター

+0

うまくいかなかった...しかし、あなたのロジックはオフではありません – DBE7

+0

4つのテーブルのスクリプトを提供できますか? – PeterO

0

は、オブジェクトエクスプローラで

をクリックして試してみてください私の推測

ベスト

です - > Databases-を展開>あなたのデータベース - >は、データベースダイアグラムを展開して展開します。あなたはDB構造を得ることができます。

オブジェクトエクスプローラ - >スクリプトテーブル - >作成する - >新しいクエリエディタウィンドウでテーブルを右クリックすると、テーブルの作成クエリが表示され、両方のデータ型を結合する列のデータ型がチェックされます同じフィールドにも関連するテーブルにある必要があります

一致するレコードだけが必要な場合は、内部結合を続行できます。一致しないレコードが必要な場合は、それに応じて左右の結合も行います

-1

あなたはu.emailでグループ化する必要があります。 ピーター

0

はこれを試してみてください

敬具:

SELECT 
u.id, 
activities, 
Max(DATE_PART('year', b.created_at)), 
u.email 
FROM boats bts 
INNER JOIN packages p ON p.boat_id = bts.id 
INNER JOIN bookings b ON b.package_id = p.id 
INNER JOIN users u ON u.id = b.user_id 
WHERE b.created_at BETWEEN '2013-01-01' AND '2015-12-30' 
GROUP BY u.id, activities, u.email 
LIMIT 100; 

敬具 ピーター

関連する問題