2010-01-12 7 views
0

Je cherche de l'aide pour écrire une requête de récupération des valeurs de 2 tables dans MySQL.Requête de base de données Aide requise dans MySQL

Le scénario est

Tableau A

ID Name Marks 
=================== 
23 John 67 
45 Mark 45 
12 Ram  87 

Tableau B présente la structure suivante

ID Name Evaluation Marks 
============================== 
45 Mark 34 
78 Chris 09 
98 Nancy 10 
23 John 12 

Je suis en train d'écrire une requête, où si j'exécute la requête suivante

Select "SOMETHING" from Table A where Id=45 

je devrais obtenir Marks colonne que 45 + 34 = 79, ce qui devrait chercher et somme de la tant dans les tableaux A et B. Le tableau

Si j'exécute la requête avec l'ID = 12. Depuis l'Id = 12, n'existe pas dans le tableau B, je devrais obtenir les marques comme 87.

Que serait une requête pour ce qui précède?

+0

S'il vous plaît voir ma réponse éditée. –

Répondre

1

Je suppose que l'ID se produit une seule fois dans vos tables la table a, mais pourrait être manquant dans les deux. S'il existe toujours dans la table a, vous pouvez utiliser un LEFT JOIN au lieu du UNION.

SELECT COALESCE(SUM(marks), 0) 
FROM 
(
    SELECT marks FROM a WHERE id = 45 
    UNION ALL 
    SELECT SUM(evaluation_marks) AS marks FROM b WHERE id = 45 
) x 

Modifier

Si vous avez tous les utilisateurs dans le tableau A, puis utilisez

SELECT a.marks + COALESCE(SUM(b.evaluation_marks), 0) 
FROM a 
LEFT OUTER JOIN b ON (b.id = a.id) 
WHERE a.id = 45 
GROUP BY a.id, a.marks 

Vous devriez envisager de changer votre modèle de table cependant. Pourquoi stockez-vous deux fois le nom et l'identifiant? Ne pouvez-vous pas le faire comme ça:

id name marks evaluation marks 
======================================= 
12 Ram  87  0 
23 John 67  12 
45 Mark 45  34 
78 Chris 0  9 
98 Nancy 0  10 
+0

Votre changement de base de données est valide, je vais changer la structure de la table, cela facilitera mon travail de développement, Merci pour votre suggestion – gmhk

+0

J'ai choisi de stocker dans une table séparée est de permettre plusieurs fois les marques d'évaluation peuvent être stockées pour l'identifiant particulier, l'idée que vous avez donné, si nous utilisons alors je ne pourrai pas stocker les multiples fois pour un Id sélectionné – gmhk

+0

@harigm: Alors vous devriez au moins supprimer le nom de la deuxième table. Voir ma réponse mise à jour (SUM ajouté à la deuxième SELECT) pour permettre plusieurs marques d'évaluation. Essayez-le. –