如果存在,则替换表的列值

时间:2014-07-15 18:06:07

标签: c++ mysql qt sqlite

我有两张桌子:

Main:

Id    | Count | Type
name1    3       1
name2    5       2
...

Temp:
Id     |Count|
name1     7
name3     2

如果两个表中都存在Count,我想更新Main表的Id列。

所以做完一些操作后,上面的例子应该是:

Main:
Id    | Count | Type
name1    7       1
name2    5       2

我目前的代码是:

QSqlQuery search_query = database_.exec("SELECT * From Temp");
while (search_query.next()){
    database_.exec("UPDATE Main"
        " SET Count=" + search_query.value(1).toString() +
        " WHERE Id = '" + search_query.value(0).toString() + "' ;");
}
database_.exec("DELETE FROM Temp");

它工作正常,但速度很慢!! (500行需要2-3分钟!!)

我正在寻找更有效的方式。我该怎么办?

2 个答案:

答案 0 :(得分:1)

如何向数据库调用单个更新脚本?

UPDATE Main m
INNER JOIN Temp t ON
    m.Id = t.Id
SET m.Count = t.Count

答案 1 :(得分:1)

在UPDATE语句中,您可以使用相关子查询查找新值:

UPDATE Main
SET Count = (SELECT Count FROM Temp WHERE Id = Main.Id)
WHERE Id IN (SELECT Id FROM Temp)