0
SELECT subjects.name as name , grades.grade as grade,  concat(instructors.lastname, ", ", instructors.firstname , " ", left(instructors.middlename, 1),".") as instructor
    FROM subjects
    JOIN grades
    JOIN instructors
    WHERE grades.student_id = 1 AND subjects.id = grades.subject_id AND instructors.subject_id = subjects.id

結果は

English    Instructor    Grade
Math       Instructor    Grade

しかし、私が欲しかったのは、まだインストラクターがいない科目に「N / A」を付けることです。例

English    Instructor    Grade
Math       Instructor    Grade
Science    N/A           Grade
History    N/A           Grade

結果が上記の例とまったく同じになるように、mySQL で条件を設定する方法を教えてください。

前もって感謝します

4

3 に答える 3

1

LEFT JOINその代わりにINNER JOIN

SELECT 
  s.name as name , 
  g.grade as grade,  
  IFNULL(concat(i.lastname, ", ", i.firstname, ...), 'N/A') as instructor
FROM subjects s
LEFT JOIN grades g ON g.subject_id = s.id 
LEFT JOIN instructors i ON g.subject_id = i.subject_id ;

SQL フィドルのデモ

注意: s の書き方JOINが正しくありません。ON節の後に節はありませんJOINON句の後に結合条件を配置する必要があります。

于 2012-12-04T11:08:25.853 に答える
0

これを試して ::

左結合とifnull

SELECT subjects.name as name , grades.grade as grade,  ifnull(concat(instructors.lastname, ", ", instructors.firstname , " ", left(instructors.middlename, 1),"."),'N/A)' as instructor
    FROM subjects
    LEFT JOIN grades on subjects.id = grades.subject_id
    LEFT JOIN instructors on instructors.subject_id = subjects.id
    WHERE grades.student_id = 1
于 2012-12-04T11:02:06.160 に答える
0

Left joinまたはright joinの代わりにjoinまたはを使用できinner joinます。Left Join関連するデータがない場合は、左側にすべてのデータが表示され、右側に null が表示されます。したがって、クエリは次のようになります。

SELECT subjects.name as name , grades.grade as grade,  
isnull(concat(instructors.lastname, ", ", instructors.firstname , " ",
left(instructors.middlename, 1),"."), 'N/A') as instructor
FROM subjects
LEFT JOIN grades ON subjects.id = grades.subject_id 
LEFT JOIN instructors  ON instructors.subject_id = subjects.id
WHERE grades.student_id = 1 
于 2012-12-04T11:02:35.523 に答える