2010-09-17 41 views
0

我真的不擅长SQL,问题如下: 我有这样选择子表的元素与给定的属性

META: 
id(pk) prop1 prop2 
    1 'pr1' 'pr2' 
    2 'pr1' 'pr2' 

同时一个元数据表,我有很多的孩子表看起来是这样的:类似

TABLE1: 
metaID(fk-pk) indx(pk) active ... 
      1   1   1 ... 
      1   2   0 ... 
      1   3   1 ... 
      2   1   1 ... 

和第二表到第一

TABLE2: 
metaID(fk-pk) indx(pk) active ... 
      1   1   1 ... 
      1   2   1 ... 
      2   1   0 ... 
      2   2   0 ... 

我需要一个查询,它可以检索元数据表属性和每个活动的子表中的记录数。

例如,如果我想与prop1 = 'pr1元素查询应该回答:

meta-id prop1 prop2 TAB1CNT TAB2CNT 
     1 'pr1' 'pr2'   2  2 
     2 'pr1' 'pr2'   1  0 

其中TAB1CNTTABLE1有源元件的数量和同样为TAB2CNT

回答

1

像这样的东西应该做的伎俩。这将返回所有元记录,无论在table1或table2中是否有任何活动记录。

SELECT ID, prop1, prop2, ISNULL(t1.ActiveCount, 0) AS TAB1CNT, ISNULL(t2.ActiveCount, 0) AS TAB2CNT 
FROM META m 
    LEFT JOIN 
    (
     SELECT metaID, COUNT(*) AS ActiveCount 
     FROM TABLE1 
     WHERE active = 1 
     GROUP BY metaID 
    ) t1 ON m.ID = t1.metaID 
    LEFT JOIN 
    (
     SELECT metaID, COUNT(*) AS ActiveCount 
     FROM TABLE2 
     WHERE active = 1 
     GROUP BY metaID 
    ) t2 ON m.ID = t2.metaID 
从这个

希望,然后你可以添加你要只返回META记录你感兴趣的任何条款。