Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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 server 执行更新查询后,子查询返回了1个以上的值错误_Sql Server - Fatal编程技术网

Sql server 执行更新查询后,子查询返回了1个以上的值错误

Sql server 执行更新查询后,子查询返回了1个以上的值错误,sql-server,Sql Server,我正在使用sql server 2012,在更新表时遇到了一个奇怪的问题 我的select查询返回树行,如下所示: select * from TAble1 p join (select ProductId=max(ProductId) from Table2 s group by s.ProductId) pin on p.id=pin.ProductId where p.categoryid=238 返回的行是: 现在,当我运行此更新查询时: update TA

我正在使用sql server 2012,在更新表时遇到了一个奇怪的问题

我的select查询返回树行,如下所示:

select * from 
    TAble1 p join
    (select ProductId=max(ProductId) from Table2 s group by s.ProductId) pin on p.id=pin.ProductId
    where p.categoryid=238
返回的行是:

现在,当我运行此更新查询时:

update TAble1 set sizing=0 from 
    TAble1 p join
    (select ProductId=max(ProductId) from TAble2 s group by s.ProductId) pin on p.id=pin.ProductId
    where p.categoryid=238
我得到了这个错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。
声明已终止。

我的查询中的问题在哪里?

看起来生成异常的问题在其他地方(例如触发器内部)。

此行可能是更新多行的原因

(select ProductId=max(ProductId) from TAble2 s group by s.ProductId)
如果您想获得max ProductID(单个值),请将其从GROUPBY子句中删除。目前,您正在请求服务器从单个值返回最大值—这是荒谬的。它只返回表2中所有ProductID值的列表。这和

select distinct ProductID from Table2

看起来生成异常的问题在其他地方(例如触发器内部)。

此行可能是更新多行的原因

(select ProductId=max(ProductId) from TAble2 s group by s.ProductId)
如果您想获得max ProductID(单个值),请将其从GROUPBY子句中删除。目前,您正在请求服务器从单个值返回最大值—这是荒谬的。它只返回表2中所有ProductID值的列表。这和

select distinct ProductID from Table2

通过s.ProductId从表2 s组中选择ProductId=max(ProductId)
将为您提供不同的ProductId,但不是
MAX
。实际上,您的查询将更新所有
TAble1.sizing
列。 试试这个:

UPDATE TAble1
SET sizing = 0
FROM TAble1 p 
JOIN
    (SELECT max(s.ProductId) AS ProductId 
    FROM TAble2) pin 
        ON p.id = pin.ProductId AND p.categoryid=238
WHERE p.categoryid = categoryid

通过s.ProductId从表2 s组中选择ProductId=max(ProductId)
将为您提供不同的ProductId,但不是
MAX
。实际上,您的查询将更新所有
TAble1.sizing
列。 试试这个:

UPDATE TAble1
SET sizing = 0
FROM TAble1 p 
JOIN
    (SELECT max(s.ProductId) AS ProductId 
    FROM TAble2) pin 
        ON p.id = pin.ProductId AND p.categoryid=238
WHERE p.categoryid = categoryid

我认为一个更好的问题是什么不是你的问题。在你的选择中,你到底应该加入什么?你要加入什么索引?您正在使用分组依据,但未将分组依据作为列包含在选择中。您不需要在子查询中为“TAble2 s”添加别名。根据您所显示的内容,表p没有categoryid列。在大多数情况下,不应该在UPDATE查询中使用FROM子句,特别是因为您只是将列设置为静态值

但要回答您的问题:子查询:“通过s.ProductId从表2的组中选择ProductId=max(ProductId)”返回所有ProductId行,因此在您尝试加入时失败

既然您没有使用表2中的信息,为什么不简单地更新如下:

update TAble1 set sizing=0 where categoryid=238

我认为一个更好的问题是什么不是你的问题。在你的选择中,你到底应该加入什么?你要加入什么索引?您正在使用分组依据,但未将分组依据作为列包含在选择中。您不需要在子查询中为“TAble2 s”添加别名。根据您所显示的内容,表p没有categoryid列。在大多数情况下,不应该在UPDATE查询中使用FROM子句,特别是因为您只是将列设置为静态值

但要回答您的问题:子查询:“通过s.ProductId从表2的组中选择ProductId=max(ProductId)”返回所有ProductId行,因此在您尝试加入时失败

既然您没有使用表2中的信息,为什么不简单地更新如下:

update TAble1 set sizing=0 where categoryid=238

这是一个触发器。非常感谢。触发器在一次行更新或其他操作后运行?所有更新的行都列在可从触发器访问的插入和删除的临时表中。它是一个触发器。非常感谢。触发器在一行更新或其他操作后运行?所有更新的行都列在可从触发器访问的插入和删除的临时表中