执行子查询以在另一个表上插入数据

时间:2019-05-07 13:29:12

标签: sql

执行以下查询时出现此错误:

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

这是我正在使用的查询:

UPDATE BatchRecords SET Fees = (
    SELECT 
        (Fees/NoOfPayments) as AvgTotal
    FROM BatchFx
    WHERE BatchRecords.BatchId = BatchFx.BatchId
    AND BatchFx.CreatedOn < '2019-05-04'
);

2 个答案:

答案 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');

请注意,您看到的错误消息暗示子查询在某些情况下将返回多个记录。选择聚合函数将是解决此问题的一种方法。