0
私はPostgreSQLを使用しています。私はこのクエリで設定し、この結果を得ることができますSQLで多くの関係を解決する
Results
student_name | biology | math
John | abc | def
Jane | zxc | NULL
:
SELECT
student.name as student_name,
biology.registration_token as biology,
math.registration_token as math
FROM
Students
LEFT JOIN (
SELECT registration_token FROM Student_Classes WHERE class_id = (
SELECT id FROM Classes WHERE name = 'Biology'
)
) AS biology
ON Students.id = biology.student_id
LEFT JOIN (
SELECT registration_token FROM Student_Classes WHERE class_id = (
SELECT id FROM Classes WHERE name = 'Math'
)
) AS math
ON Students.id = math.student_id
がですが、私はこのような結果セットを取得したい
Classes
id | name
1 | Biology
2 | Math
Students
id | name
1 | John
2 | Jane
Student_Classes
id | student_id | class_id | registration_token
1 | 1 | 1 | abc
2 | 1 | 2 | def
3 | 2 | 1 | zxc
:のは、私は3つのテーブルがあるとしましょう各クラスの結合ステートメントを持たずに同じ結果セットを得る方法?このソリューションでは、クラスを追加したい場合は、別のjoinステートメントを追加する必要があります。
RDBMSでは関係が制約によって維持されていますが、関連するテーブルとジョインするときに関係が実際に意味をなされるので、あなたは 'Join'を使う必要があると思います。あなたのケースでは、より良いスケーラビリティのためにあなたの方法でテーブルを設計する方が良いです。はい、新しいテーブルを追加する必要がある場合は、参加を続けるのが面倒です。実装する前にテーブルの設計を見直してみてください。しかし、リレーショナルデータベース理論があなたに与えるものを受け入れます。 – Rugal
[refcursors](http://www.postgresql.org/docs/current/static/plpgsql-cursors.html#AEN63396)から[構築](http://www.postgresql.org/docs/current/static/plpgsql-cursors.html#AEN63237)実行時にクエリを実行します。 – Abelisto