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.