2016-10-05 2 views
0

よろしくお願いします。 SQL Natural Join

  • (5マーク)
      自然の二つ以上の表の結合を使用していますdvdrentalデータベースにSQLクエリを構築

      :だから私は先生に頼ましまった質問はこれでした追加の条件があります。たとえば、特定の顧客がレンタルした映画のタイトルを検索します。検索結果が何も返されない場合は、コースのニュースページのヒントに注意してください。ここで

    での作業データベースイムのレイアウトです: http://www.postgresqltutorial.com/wp-content/uploads/2013/05/PostgreSQL-Sample-Database.png

    ヒント、私たちにこのでした:自然が生成されない場合は参加 :

    PostgreSQLのヒントDBの結果は、多くのテーブルに最後の更新:タイムスタンプフィールドがあるためです。したがって、自然結合は、そのフィールドと目的のフィールドに結合しようとします。

    select * 
    from film natural join inventory; 
    

    は、このために機能しません。空のテーブル(結果なし)が生成されます。
    代わりに、

    select * 
    from film, inventory 
    where film.film_id = inventory.film_id; 
    

    を使用これは私がやったことです:

    select * 
    from film, customer 
    where film.film_id = customer.customer_id; 
    

    問題は、私は特定の顧客を得ることができないです。
    customer_id = 2;してみましたが、エラーを返します。
    本当に助けが必要です!

  • +0

    はあなたを共有することができる場所の追加を構築完全なクエリとあなたが得るエラー? –

    +0

    これは、ペストのように '自然結合 'を避けるべき理由の優れた例です。 –

    +0

    'film.film_id = customer.customer_id'という結合条件は完全に間違っています。 'film_id'は' customer_id'を参照しません。顧客がレンタルした映画を入手するには、映画、在庫、レンタル、および顧客に参加する必要があります。 'フィルムfから インベントリに参加するi ON f.film_id = i.film_id レンタルrに参加i.inventory_id = r.inventory_id お客様に参加するc ON c.customer_id = r.customer_id' –

    答えて

    0

    まあ、あなたがお互いとは直接関係がない2つのテーブルを結合したいと思い、あなたの問題があることを思わ:

    where film.film_id = customer.customer_id 
    

    フィルムを借りている見つけるためにあなたが参加する必要がありますどの顧客が顧客テーブルにレンタル、次に在庫と最後に映画。

    タスクの説明状態

    自然二つ以上のテーブルの結合を使用していますdvdrentalデータベースにSQLクエリとcondition.quote