問題タブ [database-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
33 参照

sql - 3 つのテーブルから結果を返します。結果の数は、テーブル 1 の行数にテーブル 3 の行数を掛けた数に等しくなければなりません。

3 つのテーブルを持つ PostgreSQL データベースがあります。

  • user: アプリケーションのユーザーのリスト。主キーはuser_id.
  • course: ユーザーが登録できるコースのカタログ。主キーはcourse_id.
  • enrollment: ユーザーのコースへの登録の記録。主キーはenrollment_id.

テーブル間の関係:

  • テーブルには、enrollmentnull にできない 2 つの外部キーがあります。

    • enrollment.user_id参照user.user_id
    • enrollment.course_id参照course.course_id
  • user1が に登録されている場合、 への参加に使用できるテーブルcourse1内のレコードは 1 つだけである必要があります。enrollmentuser1course1

  • user1がに登録されていない場合course1、に結合するテーブルにはレコードが存在しませんenrollmentuser1course1

問題:

  • 2 人のユーザーと 3 つのコースがある場合、次のような 6 行を返すデータベース ビューを作成する方法がわかりません。

いくつかのコンテキスト:

  • データベースについては何も変更できません。
  • 私はパフォーマンスについて心配していません。

進行中の作業:

私は率直にこれがうまくいくことを望んでいました:

enrollmentユーザーが登録されていないコースのレコードがないため、このクエリは期待した結果を返しません。たとえば、結果は次のようになります。

これは私が期待するものではありません. テーブルが の 3 つのレコードを返すようにしたいのでuser1, 誰がどのコースにも登録されていcourse_idませenrollment_idnull. 同様に、 の 3 番目のレコードuser2は に登録されていないため欠落していますcourse3。これは私が望んでいるものではありません。

どうすればこの問題を解決できますか?