Je joins deux tables par la colonne regNo. Je veux ajouter les points de Table1.points et Table2.points où le regNo correspond et juste au cas où il ne correspond pas, je veux aussi qu'il soit inclus avec ses points dans la liste comme indiqué dans l'image ci-dessous
J'ai lu les problèmes existants mais je n'ai pas trouvé de solution à cela, par exemple Comment puis-je additionner les colonnes de plusieurs tables dans MySQL?
( SELECT `Ex`.regNo,(`In`.`points`+`Ex`.`points`) AS 'Points' FROM Table1`In` LEFT JOIN Table2`Ex` ON `In`.`regNo` = `In`.`regNo` ) UNION ( SELECT`Ex`.regNo,(`In`.`points`+`Ex`.`points`) AS 'Points' FROM Table1`In` RIGHT JOIN Table2`Ex` ON `In`.`regNo` = `In`.`regNo` );
Je veux qu'il donne la liste organisée selon le regNo unique (DISTINCT)
3 Réponses :
Vous recherchez un FULL JOIN
entre les deux tables.
SET @i=0; SELECT @i:=@i+1 id COALESCE(t1.regNo, t2.regNo) regNo COALESCE(t1.points, 0) + COALESCE(t2.points 0) points FROM table1 t1 FULL JOIN table2 t2 on t1.regNo = t2.regNo
NB: vous n'avez pas précisé ce que vous prévoyez de faire pour générer le nouveau id
donc par défaut la requête ci-dessus affichera le table1.id
si disponible, sinon table2.id
.
Si vous préférez générer un nouveau champ auto-incrémenté, alors:
SELECT COALESCE(t1.id, t2.id) id COALESCE(t1.regNo, t2.regNo) regNo COALESCE(t1.points, 0) + COALESCE(t2.points 0) points FROM table1 t1 FULL JOIN table2 t2 on t1.regNo = t2.regNo
Je ne suis pas très intéressé par la génération d'identifiants. Je veux juste ce regNo unique et la somme des deux tableaux comme indiqué ci-dessus
@JOB ok donc la première requête devrait bien fonctionner
Veuillez vérifier ceci. Vous devez utiliser la jointure externe complète
et le remplacement nul avant l'agrégation
select COALESCE(table1.regno, table2.regno) regno, sum(COALESCE(table1.points,0)) + sum(COALESCE(table2.points,0)) points from Table1 full outer join Table2 on table1.regno = table2.regno group by COALESCE(table1.regno, table2.regno)
Vous avez besoin de UNION
suivi de GRoUP BY
:
SELECT regNo, SUM(points) AS total FROM ( SELECT regNo, points FROM Table1 UNION ALL SELECT regNo, points FROM Table2 ) AS u GROUP BY regNo
Merci beaucoup, c'était si simple et cela a bien fonctionné avec mon cas.