Вставьте 2 значения из двух разных таблиц в одну таблицу

У меня есть проблема с вставкой 2 значения из 2 разных таблиц во время вставки в третью таблицу.

Первая таблица:

  • author_id (PK)
  • имя автора
  • author_email

Вторая таблица:

  • category_id (PK)
  • category_name

Третья таблица:

  • post_id
  • post_category
  • post_author
  • Заголовок поста
  • POST_CONTENT
  • Дата публикации

и я хочу получить author_name из первой таблицы и category_name из второй таблицы во время вставки данных в третью таблицу.

Я получил что-то вроде этого, но он не работает.

 INSERT INTO posts (post_category, post_author, post_title, post_content) SELECT category_name FROM categories WHERE category_name='python', SELECT author_name FROM authors WHERE author_name = 'm0jito', 'Lorem Ipsum', 'Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum ') 

Ждем вашей помощи.

Кроме решения @ sagi вы должны использовать Scalar Subqueries в INSERT VALUES :

 INSERT INTO posts (post_category, post_author, post_title, post_content) VALUES ( (SELECT category_name FROM categories WHERE category_name='python'), (SELECT author_name FROM authors WHERE author_name = 'm0jito'), 'Lorem Ipsum', 'Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum ' ) 

Это не удастся, если category_name или author_name не уникальны.

Кстати, вы, вероятно, хотите вернуть идентификатор категории / автора вместо имени , потому что текущий SELECT вообще не нужен. Но я предполагаю, что это был всего лишь пример.

Вам необходимо объединить эти таблицы:

 INSERT INTO posts (post_category, post_author, post_title, post_content) SELECT c.category_name,a.author_name,'Lorem Ipsum','Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum' FROM categories c CROSS JOIN authors a WHERE c.category_name = 'python' AND a.author_name = 'm0jito' 

Я использовал CROSS JOIN потому что вы не установили никаких отношений между этими двумя таблицами (немного подозрительными), если есть какой-то столбец отношений, измените его на INNER JOIN и используйте предложение ON() .

  • Как предотвратить «истечение тайм-аута запроса»? (Ошибка SQLNCLI11 '80040e31')
  • MERGE продолжает пытаться вставить нуль
  • Функция SQL не возвращает результатов, но содержимое функции возвращает результаты
  • Перечислите все рабочие даты между двумя датами в SQL
  • Создать отфильтрованный индекс, не работающий в SQL Server 2012 Express
  • Полнотекстовый поиск не работает, если включено стоп-слово, даже если стоп-лист пуст
  • Создание соединения с MDF-файлом в Visual Studio: «Файл используется»
  • Невозможно создать хранимую процедуру с параметром вывода таблицы
  • Как изменить имя сервера SQL2012 на localhost?
  • Скрытие баз данных для входа в Microsoft Sql Server 2008R2 и выше
  • Получить размер вставленной строки в SQL Server
  • Давайте будем гением компьютера.