sql - 使用联接更新表时如何修复此 SQL 错误?
问题描述
代码找到所需的数据并对其执行操作。
checktablesql1 检查购买后是否有库存
checktablesql2 将值插入到新表中,进一步用于其他用途
checktablesql3 使用用户电子邮件 ID 搜索销售
checktablesql4 在购买后用新库存更新库存
checktablesql5 删除购买后的数据
我的问题是 checktablesql4 的 sql 语法是错误的。
//This one works, used this to test if my logic works
let checktablesql4 = `SELECT i.Stock,i.Stock-s.NumberItems,s.idMedicineDatabase FROM inventory as i INNER JOIN sales as s ON s.idMedicineDatabase=i.idMedicineDatabase WHERE s.idMedicineDatabase IN (${result.map(r => r.idMedicineDatabase).join(',')}) AND s.customerEmail=? AND i.EmailID=?`;
//This one doesnt work, i get sql error, photo attached below
let checktablesql4 = `UPDATE inventory set i.Stock=i.Stock-s.NumberItems FROM inventory as i INNER JOIN sales as s ON s.idMedicineDatabase=i.idMedicineDatabase WHERE s.idMedicineDatabase IN (${result.map(r => r.idMedicineDatabase).join(',')}) AND s.customerEmail=? AND i.EmailID=?`;
完整代码
let checktablesql1 = `SELECT s.NumberItems,s.idMedicineDatabase,i.Stock-i.minStock-s.NumberItems as AvailableStock from sales as s inner join inventory as i ON i.idMedicineDatabase=s.idMedicineDatabase where s.CustomerEmail=? order by AvailableStock`;
let checktablesql2 = `INSERT into salehistory(idSales,idMedicineDatabase,NumberItems,CustomerEmail,SellSession,SaleDate) SELECT idSales,idMedicineDatabase,NumberItems,CustomerEmail,SellSession,SaleDate FROM sales WHERE CustomerEmail=?`;
let checktablesql3 = `SELECT * from sales where CustomerEmail=?`;
let checktablesql5 = `DELETE FROM sales where CustomerEmail=?`;
app.post('/checktable',(req, res) => {
const EmailID1=sellEmailID1;
const userEmailID1="abhitayshinde@gmail.com";
db.query(checktablesql1,[EmailID1], (err, result) => {
if (err) {
console.log(err);
}else{
console.log("checktablesql1",result)
if(result[0].AvailableStock>0){
db.query(checktablesql2,[EmailID1], (err, result) => {
if (err) {
console.log(err);
} else {
db.query(checktablesql3,[EmailID1], (err, result) => {
if (err) {
console.log(err);
} else {
console.log("checktablesql3",result)
//let checktablesql4 = `SELECT i.Stock,i.Stock-s.NumberItems,s.idMedicineDatabase FROM inventory as i INNER JOIN sales as s ON s.idMedicineDatabase=i.idMedicineDatabase WHERE s.idMedicineDatabase IN (${result.map(r => r.idMedicineDatabase).join(',')}) AND s.customerEmail=? AND i.EmailID=?`;
let checktablesql4 = `UPDATE inventory set i.Stock=i.Stock-s.NumberItems FROM inventory as i INNER JOIN sales as s ON s.idMedicineDatabase=i.idMedicineDatabase WHERE s.idMedicineDatabase IN (${result.map(r => r.idMedicineDatabase).join(',')}) AND s.customerEmail=? AND i.EmailID=?`;
db.query(checktablesql4,[EmailID1,userEmailID1], (err, result) => {
if (err) {
console.log(err);
} else {
console.log("checktablesql4",result)
db.query(checktablesql5,[EmailID1], (err, result) => {
if (err) {
console.log(err);
} else {
}
})
}
})
}
})
}
})
}
}
})
})
解决方案
From 在这种情况下不起作用 改用这个
let checktablesql4 = `UPDATE inventory as i INNER JOIN sales s ON i.idMedicineDatabase=s.idMedicineDatabase SET i.Stock= i.Stock-s.NumberItems WHERE s.idMedicineDatabase IN (${result.map(r => r.idMedicineDatabase).join(',')}) AND s.customerEmail=? AND i.EmailID=?`;
推荐阅读
- node.js - 我无法在 debian 上获取 npm
- javascript - 如何在选项卡之间动态路由?
- laravel - 如何将Word doc文件转换为PDF
- java - 如何生成不冲突的定长随机数?
- google-bigquery - 如何获取每个指标 BigQuery 的最后一行?
- c - 在 BST 中搜索双精度
- amazon-web-services - 我在哪里可以找到 ubuntu AWS AMI - 版本 20190816 的发行说明/变更日志?
- angular - 订阅 Angular 服务中变量值的变化
- r - R 中的逻辑回归提供 100% 的准确度,但如果我导出结果文件,它会给出不同的结果
- javascript - 有没有办法确定我的对象方法是否是函数