Как вставить INTO с помощью инструкции SELECT для столбцов с FOREIGN KEY в Node.js с пакетом mysql - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь вставить в мою идею таблицы новую запись, основанную на значениях, которые я получаю из POST. Сложность в том, что мне нужно заполнить базы идентификаторов внешних ключей на основе моего имени значения. Мои значения действительны, я уверен, проблема в утверждении.

Это для приложения Node.js, работающего с пакетом mysql из NPM (https://www.npmjs.com/package/mysql).

Мои столбцы: idea.name, idea.short_description, idea.description, idea.difficulty и category_id.

Утверждение, которое я хочу сделать, это: «ВСТАВЬТЕ В МНЕ Идею SET name = '', short_description = '', description = '', затруднение = '', category_id = (ВЫБЕРИТЕ идентификатор ИЗ категории, ГДЕ имя = '')"

Проблема в части выбора, потому что я попытался прикрепить номер по умолчанию (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)
})

Я ожидаю получить свой идентификатор внешнего ключа благодаря моему имени внешнего ключа. Поэтому я пытаюсь найти category.id с category.name.

Заранее спасибо!

1 Ответ

2 голосов
/ 28 марта 2019

Похоже, ваша проблема в том, что вы хотите выполнить подзапрос при выполнении 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 = ?
INSERT
INSERT INTO idea
SET name = ?
  , short_description = ?
  , description = ?
  , difficulty = ?
  , category = ?

Также приятным побочным эффектом является то, что у вас есть возможность решить, что произойдет, если идентификатор категории не найден.

...