我真的不擅长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
答案 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记录的任何条款。