获取Table
中的所有字段,但只显示最后创建的字段,每个字段Field
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的情况下进行查询,则效果非常好。
答案 0 :(得分:2)
而不是在每次读取后逐行执行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