2011-08-13 4 views
1

J'ai un peu de hic concernant une requête SQL particulière. J'ai besoin de joindre des données à partir de deux tables, tout en limitant les données (mais pas nécessairement en les saisissant) au moyen d'une troisième table. Les tableaux sont les suivants:Besoin d'utiliser des critères de plusieurs tables pour acquérir des données à partir de plusieurs tables

MEMBERS(member_id,first_name,last_name) 
    MEMBERS_GROUPS(member_id,group_id) 
    CHARGES(charge_id,member_id,charge_amount,status) 

Je dois trouver tous les frais pour tous les membres d'un groupe spécifique, mais je veux aussi saisir le prénom et le nom de la table MEMBRES. La requête que je suis venu avec à ce jour est:

select c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1 

j'ai aussi essayé:

SELECT c.*, m.first_name, m.last_name 
FROM charges c, members_groups mg, member m 
WHERE c.member_id=mg.member_id 
    AND mg.group_id = 1 
    AND c.status='Valid' 
    AND c.member_id = m.member_id 

... mais ni renvoie les données j'ai besoin. Je suis sûr que je le pense trop, mais je ne peux pas pour la vie de moi obtenir les bonnes valeurs. Je continue d'obtenir ce qui semble être le produit cartésien - peu importe, il renvoie clairement trop de lignes et de mauvaises données.

Répondre

0

Peut-être ce dont vous avez besoin est de limiter aussi le INNER JOIN sur members_groups à les lignes avec mg.member_id = m.member_id:

SELECT c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1 
    AND mg.member_id = m.member_id 
+0

* claques front * Totalement stupide. Mes requêtes d'origine ne fonctionnaient pas parce qu'il y avait plus d'être ajouté à eux plus bas dans la méthode. Longue histoire courte, ma requête "AND" étendue fonctionne - en plus de celle que vous venez de poster. Alors merci. –

Questions connexes