如何使用 SELECT 语句为 Node.js 中带有 FOREIGN KEY 的列插入 mysql 包
How to INSERT INTO with SELECT statement for columns with FOREIGN KEY in Node.js with mysql package
我正在尝试根据我从 POST 获得的值将新记录插入到我的 table 想法中。棘手的部分是我需要根据我的值名称填写外键 ID。我确定我的价值观是有效的,问题出在声明上。
这是一个 Node.js 应用程序,使用来自 NPM (https://www.npmjs.com/package/mysql) 的 mysql 包。
我的专栏是 idea.name、idea.short_description、idea.description、idea.difficulty 和 category_id。
我要做的语句是"INSERT INTO idea SET name = '', short_description = '', description = '', difficulty = '', category_id = (SELECT id FROM category WHERE name = '')"
select 部分是问题所在,因为我尝试附加一个默认号码 (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
提前致谢!
您的问题似乎是您希望在执行 INSERT
时 运行 一个子查询。这就是我在您的代码中看到的内容:
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = (
SELECT id
FROM category
WHERE name = ?
)
那么为什么不将 INSERT+SELECT
分成两个步骤,首先 SELECT
然后 INSERT
使用这种方法你需要两个查询:
SELECT
SELECT id
FROM category
WHERE name = ?
INSERT
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = ?
另外一个很好的副作用是您可以决定在找不到类别 ID 时会发生什么。
我正在尝试根据我从 POST 获得的值将新记录插入到我的 table 想法中。棘手的部分是我需要根据我的值名称填写外键 ID。我确定我的价值观是有效的,问题出在声明上。
这是一个 Node.js 应用程序,使用来自 NPM (https://www.npmjs.com/package/mysql) 的 mysql 包。
我的专栏是 idea.name、idea.short_description、idea.description、idea.difficulty 和 category_id。
我要做的语句是"INSERT INTO idea SET name = '', short_description = '', description = '', difficulty = '', category_id = (SELECT id FROM category WHERE name = '')"
select 部分是问题所在,因为我尝试附加一个默认号码 (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提前致谢!
您的问题似乎是您希望在执行 INSERT
时 运行 一个子查询。这就是我在您的代码中看到的内容:
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = (
SELECT id
FROM category
WHERE name = ?
)
那么为什么不将 INSERT+SELECT
分成两个步骤,首先 SELECT
然后 INSERT
使用这种方法你需要两个查询:
SELECT
SELECT id
FROM category
WHERE name = ?
INSERT
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = ?
另外一个很好的副作用是您可以决定在找不到类别 ID 时会发生什么。