2010-09-10 93 views
3

问候,我有一个查询,我正在努力,这是我第一次遇到这种类型的查询。 我有两个表,如下所示。MySQL SUM查询

XID是parent_tbl1主键,而XID是child_tbl2

外键

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 

下面是查询的部分exlanation,然后需要组成整个查询。

我需要qnty的child_tbl2总和:

1)谁是父母的酒吧是 '1' 因此,ID 5是从child_tbl2淘汰,这是因为XID 3是parent_tbl1 0

结果: 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),谁是父表有Af - Ag型“A”子表 因此,ID 3是从现有的结果中删除了,因为ID为3的Af - Ag型为B

结果: 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)和谁的家长有 '0' 作为一个它的FNO的在child_tbl2 因此,ID 4,6 & 7从现有结果消除,这是因为0并没有在他们的FNO的发现之一,而0是

结果发现作为XID 1的FNO之一: child_tbl2

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

查询的答案应该是4

下面是我所得到的。

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 ? 

如果可能,我不知道如何告诉dbms(MySQL)来检查Zero是否是fno的一个。 如果我说“AND child_tbl2.fno ='0'”,我会说结果的fno应该是0.我不希望这样,我需要零才能成为查询的SUM之一在特定的xid中qnty

回答

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

嗨,应该“src.qty”是“child_tbl2”? – Nich 2010-09-10 12:18:14

+0

编号'AS'给出一个表或列的别名,应该在任何地方使用。 – 2010-09-10 12:25:00

+0

我用parent_tbl1和tbl2替换了tbl1和child_tbl2,这是我得到的错误 - #1054 - '字段列表'中的未知列'src.qty'任何想法? – Nich 2010-09-10 12:35:30