Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何强制查询只返回一条记录?_Sql_Sql Server_Tsql - Fatal编程技术网

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
该查询可能是不确定的,因为没有排序依据。此外,将其转换为“正常”联接可能表明可以调整多重性的位置。。