已加入WHILE循环内的SELECT阻塞UPDATE

本文关键字:SELECT 阻塞 UPDATE 循环 WHILE | 更新日期: 2023-09-27 18:29:01

为每个不同的FieldTable获取所有字段,但仅获取最后创建的字段

SELECT t1.* 
FROM Table AS t1 
INNER JOIN (
      SELECT Field
           , MAX(CreatedOn) AS MaxDate 
      FROM Table 
      WHERE ImportedOn IS NULL 
      AND Status <> 'error' 
      GROUP BY Field) AS t2 
ON t1.Field = t2.Field 
AND t1.CreatedOn = t2.MaxDate

我在while循环中读取了这些数据。最后,我尝试更新相同的表——读取相同的记录——这会给我一个超时。我想这是因为该表被阻止更改。

我的问题是:如何解决它?有什么方法可以"修复"查询,使其接受更新吗

额外信息:如果我在没有JOIN的情况下查询,它会完美工作

已加入WHILE循环内的SELECT阻塞UPDATE

而不是在每次读取后逐行执行UPDATE;对该表执行JOIN并进行更新。像下面这样的东西[一个样本;不是确切的查询]

UPDATE t1
SET column_name = tab.some_column_name
FROM Table t1
JOIN
(
SELECT t1.* 
FROM Table AS t1 
INNER JOIN (
SELECT Field, 
MAX(CreatedOn) AS MaxDate 
FROM Table 
WHERE ImportedOn IS NULL 
AND Status <> 'error' 
GROUP BY Field
) AS t2 
ON t1.Field = t2.Field 
AND t1.CreatedOn = t2.MaxDate
) tab 
ON t1.Field = tab.Field