【问题标题】:How to fix SQL syntax for this example?如何修复此示例的 SQL 语法?
【发布时间】:2021-06-05 03:51:21
【问题描述】:

代码应该显示 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 错误信息

【问题讨论】:

  • 请将错误信息以文本形式发布。如果您在阅读时阅读它,您可能会发现问题;)

标签: mysql node.js reactjs


【解决方案1】:

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

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 =&gt; r.idMedicineDatabase).join(',')} 不会按照您可能想要的方式被替换。

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

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

【讨论】:

  • s.idMedicineDatabase) where 告诉我们这个右括号。它在做什么?
  • @Strawberry 谢谢,好收获;一旦我注意到错误消息中的${...},我并没有真正仔细查看 OP 的查询。我所做的只是复制查询并将引号更改为反引号。我现在已经编辑了我的答案,以从 OP 的查询中删除错误的括号。
  • 对不起,我的意思是在问题下发布这个;从手机发帖的风险
猜你喜欢
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2023-03-09
相关资源
最近更新 更多