发生错误:"无法在nvarchar上调用方法."

far*_*emi 3 sql stack-overflow

我写了一个查询来查找与特定问题相关的答案,但是在运行此代码时收到了此错误.

无法在nvarchar上调用方法

 select Posts.Id as Answer, ParentId as question, User.DisplayName as Answerer 
 FROM  Posts
INNER JOIN Users    ON Posts.OwnerUserId = Users.Id
WHERE 
ParentId in (SELECT Posts.Id
FROM  Posts
INNER JOIN PostTags ON Posts.Id          = PostTags.PostId
INNER JOIN Tags     ON PostTags.TagId    = Tags.id
INNER JOIN Users    ON Posts.OwnerUserId = Users.id
INNER JOIN PostTypes ON Posts.PostTypeId = PostTypes.Id
WHERE Tags.TagName   in 
(select 
   num.TagName as Tag

 from

(select TagName
from
Tags, PostTags, Posts
where Tags.Id = PostTags.TagId and Posts.Id = PostId
and Posts.CreationDate < '2015-04-20'
and Posts.CreationDate > '2015-01-01'
group by TagName) as rate

INNER JOIN
(select TagName 
from Tags, PostTags, Posts
where Tags.Id = PostTags.TagId and Posts.Id = PostId
group by TagName
having count(PostId) > 8000)as num 
ON rate.TagName = num.TagName
)
  AND Posts.AnswerCount > 1
  AND Posts.AcceptedAnswerId is not null
  AND Posts.Score > 0
  AND Posts.PostTypeId  = 1                -- PostTypeId = 1 -> Question
  AND Posts.CommunityOwnedDate is null
  )
AND Posts.PostTypeId  = 2                -- -> Answers
Run Code Online (Sandbox Code Playgroud)

我认为问题是ParentId,但我不明白什么是错的.

小智 9

User的查询中有一个保留字:

选择Posts.Id作为Answer,ParentId作为问题,User.DisplayName作为Answerer

您需要将其修改为 [User].DisplayName

这是SQL中保留字的一个很好的资源:https://www.drupal.org/node/141051