mysql - 使用mysql node.js批量插入时出现Sql语法错误

标签 mysql node.js node-mysql

我正在使用 mysql Node 模块。

我的查询是:

insert into myTableA (fk_1, fk_2)
values (
    (select id from myTableB where name = ?),
    (select id from myTableC where name = ?)
)

我的方法调用如下所示:

db.query(q, [values], (err) => { ... })

values 中的每一项都是一个数组,其项分别是 myTableBmyTableC 中的名称。如上所示,我确保将 values 包装在另一个数组中。

我得到的错误是:

ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...`

请帮忙...

编辑1:

我尝试插入的值如下所示:

var values = [
    [name00, name01],
    [name10, name11],
    [name20, name21],
    ...
]

编辑2:

这里是为了澄清我的困惑...基本上,我正在寻找一种方法,允许我使用 INSERT INTO 查询来组合以下 2 个查询:

INSERT INTO MyTable (col_1, col_2, col_3) VALUES ?

和:

INSERT INTO MyTableA (col_1, col_2, col_3) VALUES (
    (select id from MyTableB where name=?),
    (select id from MyTableC where name=?),
    ?
)

我正在查找的查询将允许我传递以下形式的 values 变量:

var values = [
    [row_0_col_1, row_0_col_2, row_0_col_3], 
    [row_1_col_1, row_1_col_2, row_1_col_3], 
    [row_2_col_1, row_2_col_2, row_2_col_3], 
    ...
]

最佳答案

myTableA 似乎是一个多对多表,并且您尝试将行填充为对 myTableBmyTableC 的外键引用.

使用 INSERT ... VALUES 语法,您可以指定数据值行,但必须指定每一行。像这样:

INSERT INTO myTableA (fk_1, fk_2) VALUES
  ('name00', 'name01');
  ('name10', 'name11');
  ('name20', 'name21');

每一行都是独立且独立的。如果您使用子查询,则每个子查询必须返回单个值(这称为标量子查询)。您不能使用返回多个值的子查询。

您还可以使用 INSERT ... SELECT 语法,因此 INSERT 只使用 SELECT 语句返回的行,而不是逐一列出行。

INSERT INTO myTableA (fk_1, fk_2)
  SELECT b.id, c.id
  FROM myTableB JOIN myTableC ON (...);

但是您必须提供一些联接表达式来描述如何匹配联接中两个相应表中的值。

这需要凭空发明多对多关系。

至于 Node 返回的语法错误,您在上面的帖子中包含的错误将在您输入 ... 的位置被截断。这不是完整的错误消息。您发布的查询显然已被编辑(我想您的表名称不是 myTableAmyTableB 等)。您正在寻求帮助,但您既没有提供您执行的真实查询,也没有提供真正的错误消息。鉴于此,Stack Overflow 上的任何人都无法猜测错误的原因或解决方法。

关于mysql - 使用mysql node.js批量插入时出现Sql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49493071/

相关文章:

mysql - NodeJS 与 mysql 的异步让我感到困惑

java - 使用带引号从java读取csv文件,但我想要不带引号

java - 尝试连接到 MYSQL 数据库时出现 EJBTransactionRolledbackException

java - 使用存储过程优化查询

node.js - 您可以使用 node-libcurl 设置源 header 吗?

node.js - Mongoose 中的错误处理

mysql - 如何正确处理 node-mysql 连接池中的连接持久性事物

MySQL - 检查列值(IP)是否出现在多个引用(订单)中

node.js - 计算指定记录之前匹配条件的记录数