2017-12-18 3 views
0

にnullである:右が参加する場合は、左のテーブルのフィールドを取得しますが、私はこのクエリ持っているMySQLの

SELECT 
a.nombre, 
a.apellidos, 
p.nombre AS prueba, 
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada, 
r.puntuacion, 
r.id 
FROM alumnos a 
LEFT JOIN resultados r ON r.alumno_id = a.id 
RIGHT JOIN pruebas p ON p.id = r.prueba_id 

を、私はこの結果を持っている:

enter image description here

は私が取得する必要があり、「ノンブル」としクエリーの目的は、ユーザーが行っていないすべての "プルーベア"を取得することと、既に行っているプルーベアを取得することであるため、 "alumnos"テーブルの右ジョインの結果の "apellidos"フィールド。

私は間違っているの?ここで

は、DBスキーマ

enter image description here

これはあなたが右のpruebasに参加できます何の行を持っていない

enter image description here

+0

予想される出力がどのように表示されるか表示できますか?すべてのテストと学生がいますか? – clinomaniac

+0

私は予想された結果で投稿を更新しました。私は学生のためのすべてのテストを返したいと思います。 – viher

+0

まだ取られていないテストの名前を得ることはできません。クロスジョインを使用して名前とテストのすべての組み合わせを取得できますが、テストが行​​われていないため、複雑な操作をせずに最後の行を実行することはできません。それからすべての行が必要なので、pruebasテーブルから始めて、卒業生とのCROSS参加を試みます。 – clinomaniac

答えて

0

は、このクエリを使用しようとすることができます:

SELECT pa.nombre, pa.apellidos, pa.prueba, 
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada, 
r.puntuacion, 
r.id 
FROM 
resultados r RIGHT JOIN 
(SELECT a.id alumno_id, 
a.nombre, 
a.apellidos, 
p.id prueba_id, 
p.nombre AS prueba 
FROM pruebas p CROSS JOIN alumnos a) pa 
ON r.alumno_id = pa.alumno_id 
AND r.prueba_id = pa.prueba_id; 

クロスは、すべての可能な組み合わせを取得し、結果テーブルに存在しているものを見るためにチェックしに参加します。

+0

うん!それでおしまい。どうもありがとうございます! – viher

0

あなたはRIGHTを行っているがpruebasにJOINを期待される結果です卒業生ですか?いくつかのようなa.id = p.id

SELECT 
a.nombre, 
a.apellidos, 
p.nombre AS prueba, 
IF(r.puntuacion IS NULL, 0, 1) AS prueba_realizada, 
r.puntuacion, 
r.id 
FROM alumnos a 
LEFT JOIN resultados r ON r.alumno_id = a.id 
RIGHT JOIN pruebas p ON p.id = a.id 
+0

"pruebas"テーブルには、 "alumnos"テーブルを持つ外部キーはありません。ここにスキーマがあります:https://image.ibb.co/jGBzQR/q2.png – viher

関連する問題