Sql 如何强制查询只返回一条记录?
我收到以下错误: '子查询返回了多个值。这是不允许的,因为 子查询后面是=,!= 我的问题是:Sql 如何强制查询只返回一条记录?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我收到以下错误: '子查询返回了多个值。这是不允许的,因为 子查询后面是=,!= 我的问题是: let getLinkTopicsSql = "SELECT Topic.Id, Topic.Name, isnull( (select 1 from FeaturedTopic where TopicId = Topic.Id),0) a
let getLinkTopicsSql = "SELECT Topic.Id,
Topic.Name,
isnull( (select 1 from FeaturedTopic where TopicId = Topic.Id),0) as IsFeatured
FROM Topic
INNER JOIN LinkTopic
ON LinkTopic.TopicId = Topic.Id
INNER JOIN Link
ON LinkTopic.LinkId = Link.Id
WHERE Link.Id = @LinkId"
我试过:
SELECT TOP 1
像这样:
let getLinkTopicsSql = "SELECT TOP 1 Topic.Id,
Topic.Name,
isnull( (select 1 from FeaturedTopic where TopicId = Topic.Id),0) as IsFeatured
FROM Topic
INNER JOIN LinkTopic
ON LinkTopic.TopicId = Topic.Id
INNER JOIN Link
ON LinkTopic.LinkId = Link.Id
WHERE Link.Id = @LinkId"
但我仍然收到同样的例外
我不知道如何解决这个问题…我想你希望
存在
:
(case when exists (select 1 from FeaturedTopic where TopicId = Topic.Id)
then 1 else 0
end) as IsFeatured
您可以使用isnull()
执行此操作,如下所示:
isnull( (select top (1) 1 from FeaturedTopic where TopicId = Topic.Id), 0) as IsFeatured
或没有:
select coalesce(max(1), 0) from FeaturedTopic where TopicId = Topic.Id) as IsFeatured
但是我认为
存在
是最清晰的形式。我想你想要存在
:
(case when exists (select 1 from FeaturedTopic where TopicId = Topic.Id)
then 1 else 0
end) as IsFeatured
您可以使用isnull()
执行此操作,如下所示:
isnull( (select top (1) 1 from FeaturedTopic where TopicId = Topic.Id), 0) as IsFeatured
或没有:
select coalesce(max(1), 0) from FeaturedTopic where TopicId = Topic.Id) as IsFeatured
但我认为,
exists
是最清晰的形式。您的SELECT子句中的子查询需要顶部1,而不是主查询。此查询从FeaturedTopic中选择1,其中TopicId=Topic.Id
返回多条记录。它不知道如何处理这个结果。尝试从FeaturedTopic中选择TOP 1 1,其中TopicId=Topic.Id
或从FeaturedTopic中选择DISTINCT 1,其中TopicId=Topic.Id
该查询可能是不确定的,因为没有排序依据。此外,将其转换为“正常”联接可能会指示可调整多重性的位置。需要顶部1的是SELECT子句中的子查询,而不是主查询。此查询SELECT 1 from FeaturedTopic,其中TopicId=Topic.Id
返回多条记录。它不知道如何处理这个结果。尝试从FeaturedTopic中选择TOP 1 1,其中TopicId=Topic.Id
或从FeaturedTopic中选择DISTINCT 1,其中TopicId=Topic.Id
该查询可能是不确定的,因为没有排序依据。此外,将其转换为“正常”联接可能表明可以调整多重性的位置。。