选择具有给定属性的子表的元素

时间:2010-09-17 09:19:42

标签: sql sql-server sql-server-2005

我真的不擅长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 个答案:

答案 0 :(得分: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记录的任何条款。