使用子查询时出错
Posted
技术标签:
【中文标题】使用子查询时出错【英文标题】:Error using subquery 【发布时间】:2013-12-19 10:41:03 【问题描述】:我正在尝试执行以下查询:
UPDATE TempRH
SET TempRH.poids=0
WHERE TempRH.poids IN (SELECT *
FROM(
SELECT MAX(TempRH.poids)as poids,TempRH.utilisateur_id
FROM TempRH
INNER JOIN (SELECT TempRH.utilisateur_id
FROM TempRH
GROUP BY TempRH.utilisateur_id
HAVING COUNT(*)>2)t
ON t.utilisateur_id =TempRH.utilisateur_id
GROUP BY TempRH.utilisateur_id
)x);
我收到以下错误 消息 116,第 16 级,状态 1,第 16 行 不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
【问题讨论】:
首先我会建议可见性使用 cte。而且错误似乎很清楚,使用exists而不是in。我对这个错误并不常见,因为我长期以来一直禁止查询值:) where exists (...... where temprh.poids = poids跨度> 【参考方案1】:哦,是的,你的错误,但请看评论:)
您要从查询中返回 2 列,您只能为 in 子句返回一列。
删除 ,temprh.utilisateur_id ,您的 select 语句中不需要它
【讨论】:
【参考方案2】:这是您删除的帖子的解决方案,以了解如何进行更新:
declare @temprh table (utilisateur_id int, poids int)
insert into @temprh values (1,10)
insert into @temprh values (1,20)
insert into @temprh values (2,30)
insert into @temprh values (3,40)
insert into @temprh values (3,50)
;with x as (
SELECT utilisateur_id as uu, MAX(TempRH.poids)as pp, COUNT(*) as cnt
FROM @temprh as TempRH
GROUP BY TempRH.utilisateur_id
)
UPDATE @TempRH
SET poids=0
WHERE exists (select * from x where x.uu = Utilisateur_id and pp = poids and cnt=2)
当然这是一个示例,但我只是将您的表名替换为一个变量以获取一些数据。您想将较高的一位删除为 0 对吗?
【讨论】:
以上是关于使用子查询时出错的主要内容,如果未能解决你的问题,请参考以下文章