代码之家  ›  专栏  ›  技术社区  ›  Sambatyon

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

  •  0
  • Sambatyon  · 技术社区  · 15 年前

    我真的不擅长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
    

    在哪里? TAB1CNT 是的活动元素的计数 TABLE1 同样的道理 TAB2CNT

    1 回复  |  直到 15 年前
        1
  •  1
  •   AdaTheDev    15 年前

    像这样的事情应该会奏效。这将返回所有元记录,不管表1或表2中是否有任何活动记录。

    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
    

    希望从中,您可以添加任何想要只返回您感兴趣的元记录的子句。

    推荐文章