0

これが私のデータベース構造です:

観測記録 - データベース構造

そして、ここに私が試みているSQL文があります:

SELECT
 t1.Name AS Teacher_Name,
 t2.Name AS Observer_Name,
 o.Datetime AS Datetime,
 o.Type AS Type,
 o.Year_Group AS Year_Group,
 o.Class_Name AS Class_Name,
 c.Title AS Course_Name,
 GROUP_CONCAT(f.Focus_ID) AS Focus,
 o.Achievement_Grade AS Achievement_Grade,
 o.Behaviour_Grade AS Behaviour_Grade,
 o.Teaching_Grade AS Teaching_Grade,
 o.Notes AS Notes
FROM observations o
INNER JOIN teachers t1 ON o.Teacher_ID = t1.Teacher_ID
INNER JOIN teachers t2 ON o.Observer_ID = t2.Teacher_ID
INNER JOIN courses c ON o.Course_ID = c.Course_ID
INNER JOIN foci f ON f.Observation_ID = o.ID
ORDER BY `Datetime` DESC LIMIT 0,10

私が達成しようとしているのは、上記のステートメント内Foci,Appraisal,Post 16,Teaching and Learning.

これは、Foci.Observation_ID が Observations.ID一致する Foci テーブルのすべての行を取得 し、Foci.Focus_ID が Focus_Labels.ID と一致する場合に Focus_Labels.Title から各フォーカスの名前を取得することによって実現されます。

Focus_Labels.Title上記のステートメントでは、機能することさえできなかったため、取得しようとしても取得できませんでしたFoci.ID

誰でも助けることができますか?

4

1 に答える 1

1

すべてのテーブルに特定の行が存在しない限り、結果が返されないため、 anINNER JOINからa に少し変更することをお勧めします。LEFT JOIN

SELECT
     t1.Name AS Teacher_Name,
     t2.Name AS Observer_Name,
     o.Datetime AS Datetime,
     o.Type AS Type,
     o.Year_Group AS Year_Group,
     o.Class_Name AS Class_Name,
     c.Title AS Course_Name,
     GROUP_CONCAT(l.title) AS Focus,
     o.Achievement_Grade AS Achievement_Grade,
     o.Behaviour_Grade AS Behaviour_Grade,
     o.Teaching_Grade AS Teaching_Grade,
     o.Notes AS Notes
FROM observations o
LEFT JOIN teachers t1 
    ON o.Teacher_ID = t1.Teacher_ID
LEFT JOIN teachers t2 
    ON o.Observer_ID = t2.Teacher_ID
LEFT JOIN courses c 
    ON o.Course_ID = c.Course_ID
LEFT JOIN  foci f
    ON o.ID = f.Observation_ID
LEFT JOIN focus_labels l
    on f.focus_id = l.id
GROUP BY o.id
ORDER BY `Datetime` 
DESC LIMIT 0,10
于 2012-09-18T19:16:24.043 に答える