2010-09-10 6 views
3

Salutations, J'ai une requête avec laquelle je me bats, c'est la première fois que je rencontre ce type de requête. J'ai deux tables comme indiqué ci-dessous.MySQL SUM Query

xid est la clé primaire dans parent_tbl1, alors que xid est la clé étrangère dans child_tbl2

de parent_tbl1

xid pub 
1 1  
2 1  
3 0  
4 1 

child_tbl2

id ttype fno xid qnty 
1 A  0 1 0 
2 A  1 1 3 
3 B  1 1 4 
4 A  1 2 1 
5 A  1 3 2 
6 A  1 4 3 
7 A  1 4 1 
8 A  1 1 1 

Voici la exlanation de la requête dans certaines régions, qui devra ensuite composer toute la requête.

J'ai besoin SUM de qnty dans child_tbl2:

1) Qui est le pub de parent est '1' Par conséquent, id 5 est éliminé de child_tbl2, c'est parce que XID 3 est 0 à parent_tbl1

Résultats : child_tbl2

id ttype fno xid qnty 
1 A  0 1 0 
2 A  1 1 3 
3 B  1 1 4 
4 A  1 2 1 
6 A  1 4 3 
7 A  1 4 1 
8 A  1 1 1 

2) et qui est la table parent a ttype 'A' dans la table des enfants par conséquent, id 3 est éliminé des résultats existants parce que ttype de id 3 est B

Résultats: child_tbl2

id ttype fno xid qnty 
1 A  0 1 0 
2 A  1 1 3 
4 A  1 2 1 
6 A  1 4 3 
7 A  1 4 1 
8 A  1 1 1 

3) et qui est parent a '0' comme l'un il est FNO de dans le child_tbl2 Par conséquent, id 4, 6 & 7 sont éliminés des résultats existants, c'est parce que 0 n'a pas été trouvé dans l'un de leurs années FNO, alors que 0 a été trouvé comme l'un des FNO de XID 1

Résultats: child_tbl2

id ttype fno xid qnty 
1 A  0 1 0 
2 A  1 1 3 
8 A  1 1 1 

La réponse à la question devrait être 4

Voici ce que j'ai.

SELECT sum(child_tbl2.qnty), parent_tbl1.xid, parent_tbl1.pub, child_tbl2.ttype, child_tbl2.fno, child_tbl2.xid 
FROM parent_tbl1, child_tbl2 
WHERE parent_tbl1.xid = child_tbl2.xid 
AND parent_tbl1.pub = '1' 
AND child_tbl2.ttype = 'A' 

AND child_tbl2.fno ? 

S'il est possible, je ne sais pas comment dire les DBMS (MySQL) pour vérifier si Zero est l'une des années FNO. Si je dis "AND child_tbl2.fno = '0'", je dirais que le fno de résultat devrait être 0. Je ne veux pas cela, j'ai besoin de zéro pour être l'un des fno pour la requête à SUM tous le qnty dans ce xid particulier

Répondre

2
SELECT SUM(DISTINCT src.qnty) as qnty 
FROM tbl2 AS src 
INNER JOIN tbl1 AS pub 
    ON src.xid=pub.xid 
INNER JOIN tbl2 AS fno 
    ON pub.xid=fno.xid 
WHERE pub.pub=1 
    AND src.ttype='A' 
    AND fno.fno=0 
+0

Salut, devrait "src.qty" être "child_tbl2"? – Nich

+0

Non. 'AS' donne à un tableau ou à une colonne un alias qui devrait être utilisé partout. –

+0

J'ai remplacé tbl1 par parent_tbl1 et tbl2 par child_tbl2 et c'est l'erreur que j'ai - # 1054 - Colonne inconnue 'src.qty' dans 'liste des champs' Des idées? – Nich