以下是我的查询以获取documentid的计数
select count(did),did
from (
select count(FileDataId) as fid,
documentid as did,
FileDataId
from DocumentHistory
where documentid in (
select documentid
from Document
where DocumentTypeId=11 and
IsVerified=0 and
lastmodified < '5/jan/2019'
)
group by DocumentId,
filedataid
having count(FileDataId)<2
)
我收到错误消息
')'附近的语法不正确。
如果我运行内部查询,它将为我带来结果
我想知道结果重复了多少次
答案 0 :(得分:4)
我猜是因为您没有为子查询添加别名。您还缺少外部查询中的分组。您查询的格式也可以改善:
select
count(a.did),
a.did
from (
select
count(dh.FileDataId) as fid,
dh.documentid as did,
dh.FileDataId
from DocumentHistory dh
INNER JOIN Document d on d.documentid = dh.documentid
where d.DocumentTypeId=11 and d.IsVerified=0 and d.lastmodified < '2019-01-05'
group by DocumentId, filedataid
having count(FileDataId)<2
) a
GROUP BY did
以及结合西蒙的建议 围绕日期格式(yyyy-mm-dd是ISO,并且不受诸如包含单词的日期之类的本地化问题的影响-您的查询可能不适用于例如西班牙数据库),我也将IN换成了INNER JOIN;尽管查询优化器通常可以将IN重写为类似于联接的行为,但您应避免将IN用于列表的时间长于您准备手工编写的时间。某些数据库在连接方面比在
中进行了更好的优化。请注意,INNER JOIN和IN之间的行为略有不同,如果IN(...)列表包含重复项,则不会从文档历史记录结果中得到重复的行,但是您会得到一个内部联接。 (我希望documentid是文档的主键,因此在这种情况下不会出现重复)