已加入WHILE循环内的SELECT阻塞UPDATE
本文关键字:SELECT 阻塞 UPDATE 循环 WHILE | 更新日期: 2023-09-27 18:29:01
为每个不同的Field
从Table
获取所有字段,但仅获取最后创建的字段
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的情况下查询,它会完美工作
而不是在每次读取后逐行执行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