0
votes

Comment joindre deux tables et additionner leurs colonnes dans Mysql en fonction d'une colonne distincte

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 résultats attendus des deux tables1 & table2

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)


0 commentaires

3 Réponses :


0
votes

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


2 commentaires

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



0
votes

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)


0 commentaires

1
votes

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


1 commentaires

Merci beaucoup, c'était si simple et cela a bien fonctionné avec mon cas.