首页 > 解决方案 > 如何修复此示例的 SQL 语法?

问题描述

代码应显示 3 个表的 LEFT JOIN 的结果,但事实并非如此,并在下面给出错误消息。

Reactjs:代码获取值并将其显示在 console.log 中

import React,{useEffect, useState} from 'react'
import Axios from "axios";


export default function DisplaySell() {

      function sellfunc(){
        console.log("function call")
        Axios.get('http://localhost:3001/getselldatatable').then((response) => {
           console.log("TABLE DATA",response)
        });
      }
    return (
        <div>
            here
            <button onClick={sellfunc}>Sell</button>
        </div>
    )
}

Nodejs:代码从 3 个不同的表中获取所有记录

let getsalessql = `SELECT * FROM sales where CustomerEmail=? AND SellSession=(select max(SellSession) from sales)`;
var idMedicineDatabase;
var EmailID;
app.get("/getselldatatable", (req, res) => {
    EmailID="test2@gmail.com";
            db.query(getsalessql,[EmailID],(err, result1) => {
                if (err) {
                    console.log(err);
                } else {
                    console.log(result1)
                        let getsalessql2 = "(SELECT * FROM medicinedatabase as m LEFT JOIN inventory as i ON m.idMedicineDatabase = i.idMedicineDatabase LEFT JOIN sales as s ON m.idMedicineDatabase = s.idMedicineDatabase) where m.idMedicineDatabase IN (${result1.map(r => r.idMedicineDatabase).join(',')})";
                        db.query(getsalessql2,(err, resultnew) => {
                            if (err) {
                                console.log(err);
                            } else {
                                console.log(resultnew)
                                //console.log(resultnew)
                                res.json(resultnew)
                            }

                        });
                    
                }
          });
    
});

MySQL 错误信息

在此处输入图像描述

标签: mysqlnode.jsreactjs

解决方案


看起来您在 SQL 字符串中使用了模板文字语法……只是您使用的是双引号,而不是模板文字所需的反引号。试试这个:

let getsalessql2 = `
  SELECT * 
  FROM medicinedatabase as m 
  LEFT JOIN inventory as i 
    ON m.idMedicineDatabase = i.idMedicineDatabase 
  LEFT JOIN sales as s 
    ON m.idMedicineDatabase = s.idMedicineDatabase 
  where m.idMedicineDatabase IN (
    ${result1.map(r => r.idMedicineDatabase).join(',')}
  )`;

使用除反引号以外的任何内容,${result1.map(r => r.idMedicineDatabase).join(',')}都不会按照您可能想要的方式替换。

*编辑:正如@strawberry 在评论中提到的那样,select...from原始查询中的子句周围的括号不应该真的存在......我已经删除了它们。

*Edit2:模板文字允许多行字符串;缩进 SQL 以提高可读性。


推荐阅读