如何使用SELECT语句在带有Node.js的FOREIGN KEY的列中使用SELECT语句插入INTO

时间:2019-03-28 19:56:12

标签: mysql node.js express node-mysql

我正在尝试根据从POST获取的值将新记录插入到我的表中。棘手的部分是,我需要根据我的值名称来填充外键ID。我确定我的值是有效的,问题出在语句上。

这是针对使用NPM(https://www.npmjs.com/package/mysql)的mysql程序包的Node.js应用程序。

我的专栏是idea.name,idea.short_description,idea.description,idea.difficulty和category_id。

我要执行的语句是““ INSERT INTO idea SET name =``,short_description ='',description =``,难易度='',category_id =(从类别WHERE名称=的SELECT ID)” / p>

选择部分是问题所在,因为我尝试附加默认数字(1),并且可以正常工作。

我必须处理以下mysql软件包:

db.query('INSERT INTO idea SET name = ?, short_description = ?, description = ?, difficulty = ?, category_id = 1', [name, short_description, description, difficulty, category_id], (err, result) => {
if (err) throw err
cb(result)
})

我想要看起来像这样的东西:

db.query('INSERT INTO idea SET name = ?, short_description = ?, description = ?, difficulty = ?, category = (SELECT id FROM category WHERE name = ' + category ')', [name, short_description, description, difficulty, category], (err, result) => {
if (err) throw err
cb(result)
})

由于我的外键名称,我希望得到我的外键ID。所以我尝试用category.name查找category.id。

谢谢!

1 个答案:

答案 0 :(得分:2)

似乎您的问题是您想在执行INSERT时运行子查询。这是我在您的代码中看到的:

INSERT INTO idea
SET name = ?
  , short_description = ?
  , description = ?
  , difficulty = ?
  , category = (
      SELECT id
      FROM category
      WHERE name = ?
    )

那么为什么不将INSERT+SELECT分为两个步骤,首先是SELECT,然后是INSERT

使用这种方法,您将需要两个查询:

  1. SELECT
SELECT id
FROM category
WHERE name = ?
  1. INSERT
INSERT INTO idea
SET name = ?
  , short_description = ?
  , description = ?
  , difficulty = ?
  , category = ?

还有一个很好的副作用,就是您有一个地方可以确定在未找到类别ID时会发生什么。