使用子查询时出错

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

【讨论】:

以上是关于使用子查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用子查询计算时差时出错

尝试使用 min 子查询查找记录时 Hive 出错

创建函数时出错 - 如果不使用 EXISTS 引入子查询,则选择列表中只能指定一个表达式

尝试将子表单记录源设置为 sql 查询时出错

Hive 子查询出错 - 不支持的子查询表达式

MySQL 子查询出错