在我的应用程序中,我有一组可以在列出资源时应用的过滤器,这些过滤器在执行查询之前通过添加WHERE子句等来构建查询.这是使用SQL Server 2008.
我有两个相关的表,一个包含有关资源的一些静态数据,另一个可以包含与该资源有关的任意/可选字段.
第一个表是这样的(表名和字段已更改):
CREATE TABLE Resources (
ResID varbinary(28),
... extra stuff omitted
type integer );
Run Code Online (Sandbox Code Playgroud)
第二个表只有名称/值对和相应的资源ID
CREATE TABLE ResourceFields (
ResID varbinary(28) NOT NULL,
Name nvarchar(255) NOT NULL,
Value nvarchar(1024) NOT NULL);
Run Code Online (Sandbox Code Playgroud)
因此,对于此示例,"ResourceFields"中可能有多行,其中name ='ContactName'表示相同的ResID.
我想要做的是获取'Resources'表中有多个'ContactName'列在'ResourceFields'中且'type'等于某个值的行数.
我想出了这个(不要笑 - 我知道足够的SQL导致问题)
SELECT count(r.ResID)
FROM Resources as r
INNER JOIN ResourceFields AS rf
ON rf.ResID = r.ResID
AND rf.name = 'ContactName'
WHERE r.type = 1
GROUP BY rf.ResID
HAVING COUNT(rf.Value) > 1;
Run Code Online (Sandbox Code Playgroud)
但是不是在'Resources'中返回行数(我的测试集中的43)的计数,而是返回所有返回的COUNT(rf.Value)值(即43个单独的计数).
我究竟做错了什么?