我正在尝试通过它们的itemId和quantities将一些项插入到我的sqlite3数据库中,然后通过将它们与另一个表items的itemId进行比较来更新这些插入的项。
我已经将所有东西都包装在Promise中,试图实现这一点,但还没能让它运行起来。
function makeOrderHandler(request, response, data) {
insertOrder(request, response, data)
.then(() => updateItemNames(request, response, data))
.then(() => {
console.log("Updated items!");
})
.catch(err => {
console.log("Caught error: "+err);
}); // end promise chain
} // end makeOrderHandler
function insertOrder(request, response, data) {
return new Promise(function(resolve, reject) {
var db = require('./DBManager.js').getPool();
for(let i = 0; i < data['content'].length; i++) {
let unit = data['content'][i];
db.run("INSERT INTO orderedItems"
+ " (itemId, quantity) VALUES"
+ " ($itemId, $quantity);",
{
$itemId: unit.itemId,
$quantity: unit.quantity
},
function(err) {
if(!err) {
// Could do something here
} else {
reject("SQLite3 insert error: "+err);
} // end else
}); // end run
} // end for
resolve();
}); // end return
} // end makeOrder
function updateItemNames(request, response, data) {
return new Promise(function(resolve, reject) {
var db = require('./DBManager.js').getPool();
db.run("UPDATE orderedItems, menuItems SET orderedItems.itemName = menuItems.itemName, orderedItems.unitPrice = menuItems.unitPrice WHERE orderedItems.itemId = menuItems.itemId;",
function(err) {
if(err) {
reject("SQLite3 update error: "+err);
} else if(this.changes == 1) {
resolve();
} else {
reject("NOTHING DONE!!!");
} // end else
} // end error
); // end run
// resolve();
}); // end return
} // end updateItemNames抛出的错误似乎来自updateItemNames()函数:
Caught error: SQLite3 update error: Error: SQLITE_ERROR: near ",": syntax error。
也许我需要重新构造我的SQL表,或者以另一种顺序调用东西?我对SQL的理解还不够深入,但我确实在sqlfiddle上做过同样的尝试,SQL语句看起来还不错,所以这看起来像是JavaScript/异步问题。我还尝试在不使用WHERE条件的情况下更新orderedItems表,以与menuItems表进行比较,并且成功了。因此,当我将orderedItems.itemId与menuItems.itemId进行比较时,似乎出现了一个问题。
发布于 2018-08-15 22:42:39
将查询更改为包含子查询(以某种方式)解决了我的问题:
db.run("UPDATE orderedItems"
+ " SET itemName ="
+ " ("
+ " SELECT menuItems.itemName"
+ " FROM menuItems"
+ " WHERE menuItems.itemId = orderedItems.itemId"
+ " ),"
+ " unitPrice ="
+ " ("
+ " SELECT menuItems.unitPrice"
+ " FROM menuItems"
+ " WHERE menuItems.itemId = orderedItems.itemId"
+ " )"
+ " WHERE"
+ " EXISTS "
+ " ("
+ " SELECT *"
+ " FROM menuItems"
+ " WHERE menuItems.itemId = orderedItems.itemId"
+ " );"
...正如我前面提到的,当使用MySQL在sqlfiddle上测试时,查询工作得很好,所以我想知道SQLite3是否有必要使用子查询。
https://stackoverflow.com/questions/51830724
复制相似问题