如果小于现有,则使用min进行Sqlite更新

时间:2015-03-21 00:38:50

标签: sql sqlite

必须误解一些基本的东西,有几张桌子:

table1 (id, minValue)
table2 (table1Id, value)

如果我运行查询:

UPDATE table1 SET minValue = (SELECT MIN(value) FROM table2 WHERE table1.id == table2.table1Id);

我得到了预期的值。但是,如果我运行此查询,则minValues保持为null:

UPDATE table1 SET minValue = MIN(minValue, (SELECT MIN(value) FROM table2 WHERE table1.id == table2.table1Id));

我将从多个表更新minValue,所以我想确保它保持小于传入值,但是当minValue仍然为null时仍然会更新。

2 个答案:

答案 0 :(得分:1)

如果你想确保minValue永远不会更新到高于当前值,你需要做的就是添加一个条件,只将更新应用于存在较低传入值的行:

UPDATE table1 
SET minValue = (
    SELECT MIN(value) 
    FROM table2
    WHERE table1.id = table2.table1Id 
    )
WHERE EXISTS (
    SELECT value
    FROM table2
    WHERE table1.id = table2.table1Id 
      AND table2.value < table1.minValue
)

答案 1 :(得分:0)

我相信这就是你要找的东西?

UPDATE table1 SET minValue <= ALL(SELECT MIN(table2.value) FROM table1,table2 WHERE table1.id == table2.table1Id));