2
votes

Mysql - La jointure droite ne récupère pas les données correctes

Je stocke l'activité de l'utilisateur dans la table par heure de début et de fin, maintenant je veux obtenir tous les enregistrements de ma table d'objet et les enregistrements correspondants de la table de journal.

Ceci est ma table d'objet

entrez la description de l'image ici

Ceci est ma table de journal

 entrez la description de l'image ici

Je veux la sortie comme ceci

 entrez la description de l'image ici

J'ai essayé d'utiliser du code mais les enregistrements qui ne correspondaient qu'à la table du journal sont renvoyés comme record, c'est ce que j'ai essayé. Toute aide est appréciable.

SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time,
                B.subject_name,
                A.subject_id
            FROM prep_learn_log A
            RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id 
                AND B.active = 'Y'
            WHERE A.user_id = '1' GROUP BY A.subject_id


0 commentaires

3 Réponses :


1
votes

Vous pouvez essayer ci-dessous en mettant A.user_id = '1' dans On Clause

SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time,
       B.subject_name,
       A.subject_id
       FROM prep_learn_log A
       RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id 
       AND B.active = 'Y' and A.user_id = '1' 
       GROUP BY A.subject_id,B.subject_name


0 commentaires

1
votes

Vous devez déplacer la condition where dans la clause ON

SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time,
            B.subject_name,
            A.subject_id
        FROM prep_learn_log A
        RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id 
            AND B.active = 'Y' AND A.user_id = '1' 
 GROUP BY A.subject_id

l'utilisation de la colonne jointe à droite dans la condition where fonctionne comme une jointure interne


0 commentaires

0
votes

Comment ça va?

SELECT IFNULL (SEC_TO_TIME (SUM (TIME_TO_SEC (TIMEDIFF (b.end_time, b.start_time)))), "00:00:00") AS prep_time, a.subject_name, a.subject_id FROM prep_subject a JOINT GAUCHE prep_learn_log b ON a.subject_id = b.subject_id AND a.active = 'Y' GROUP BY a.subject_id ORDER BY a.subject_id;


0 commentaires