执行以下查询时出现此错误:
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
这是我正在使用的查询:
UPDATE BatchRecords SET Fees = (
SELECT
(Fees/NoOfPayments) as AvgTotal
FROM BatchFx
WHERE BatchRecords.BatchId = BatchFx.BatchId
AND BatchFx.CreatedOn < '2019-05-04'
);
答案 0 :(得分:2)
您的错误正在发生,因为您的WHERE
子句返回了1条以上的记录。因此,update语句很困惑,它需要更新哪一行(因为您最有可能在BatchFX表中每个ID拥有1条以上的记录)。我在this link中复制了您的问题,并获得了相同的输出。
因此,要解决此问题,您需要使用聚合器对所有行进行分组并从子查询中输出一条记录。
UPDATE BatchRecords
SET Fees = (
SELECT
AVG(Fees / NoOfPayments) as AvgTotal
FROM BatchFx
WHERE BatchRecords.BatchId = BatchFx.BatchId
AND BatchFx.CreatedOn < '2019-05-04'
);
希望这会有所帮助:)
答案 1 :(得分:1)
别名AvgTotal
似乎意味着您想要取平均值,所以为什么不尝试这样做:
UPDATE BatchRecords br
SET Fees = (SELECT AVG(Fees/NoOfPayments) AS AvgTotal
FROM BatchFx bf
WHERE br.BatchId = bf.BatchId AND bf.CreatedOn < '2019-05-04');
请注意,您看到的错误消息暗示子查询在某些情况下将返回多个记录。选择聚合函数将是解决此问题的一种方法。