2016-05-08 9 views
2

私は4つのテーブルを持っています。MysQL:空行のデフォルト値を設定する方法は?

1. Course 2. Semester 3. AssignTeacher 4. Teacher. 

Course has id, name, code. 
Semester has id, name, course_id. 
AssignTeacher has id,course_id,teacher_id. 
Teacher has id, name. 

は今、私は上記の表からcourses.code、courses.name、semesters.nameとteachers.name を見つけたいです。 teacher.nameにはAssignTeacherテーブルにIDを持つ教師がいなければなりません。今コーステーブルで教師IDがそのコースではなくnull値を表示するのではない場合、私は 'None'のようないくつかのデフォルト値を設定できますか?

SELECT courses.code, courses.name, semesters.name,teachers.name 
FROM semesters 
JOIN courses on courses.semester_id = semesters.id 
JOIN assign_teachers on assign_teachers.course_id=courses.id 
JOIN teachers on assign_teachers.id=teachers.id 
+0

x69 - サンプル出力を表示できますか?いつもポイントであなたが望むものを説明してください。 – MontyPython

答えて

1

に選択リストの変化を、あなたは:ここ

は私が期待したものになっていなかったのに、私が今まで書かれているクエリですnullを望ましい値に置き換えるCOALESCE()を使用する必要があります。

SELECT courses.code, courses.name, semesters.name,COALESCE(teachers.name,'None') as teacher_name 
from semesters join courses on courses.semester_id = semesters.id 
    join assign_teachers on assign_teachers.course_id=courses.id 
    join teachers on assign_teachers.id=teachers.id 

あなたが通常の結合を使用しているので、このレコードはフィルタリングされる必要があります。代わりに左結合を使用する必要があります:

SELECT courses.code, courses.name, semesters.name,COALESCE(teachers.name,'None') as teacher_name 
from semesters join courses on courses.semester_id = semesters.id 
    left join assign_teachers on assign_teachers.course_id=courses.id 
    left join teachers on assign_teachers.id=teachers.id 
+0

事実、私は 'COALESCE(teachers.name、 'None')'として列名を取得しています。Imではなく、すべてのコースリストを取得していないので、assign_teacherテーブルのIDを持つコースだけが取得されます。 – Hola

+0

これは私が2番目の例のように、LEFT JOINを使うべきであるという説明を追加した理由です。エイリアスだけの列名については、コードを編集しました。 2番目のクエリを実行します。 @ x69 – sagi

+0

私はあなたの2番目のクエリも実行しました。同じ出力が表示されています! – Hola

1

私が正しく理解している場合、もちろん

COALESCE(teachers.name, 'None') 
関連する問題