使用子查询时出错

时间:2013-12-19 10:41:04

标签: sql-server

我正在尝试执行以下查询:

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一起引入时,只能在选择列表中指定一个表达式。

2 个答案:

答案 0 :(得分:2)

哦,是的,你的错误,但看看评论:)

您正在从查询中撤回2列,您只能为in子句返回一列。

删除,temprh.utilisateur_id,在select语句中不需要它

答案 1 :(得分:0)

以下是您删除的帖子以及如何进行更新的解决方案:

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吗?