Вставьте 2 значения из двух разных таблиц в одну таблицу
У меня есть проблема с вставкой 2 значения из 2 разных таблиц во время вставки в третью таблицу.
Первая таблица:
- author_id (PK)
- имя автора
- author_email
Вторая таблица:
- Настройка состояния NOCOUNT с локальной переменной
- Операторы * = и = * sql
- Ошибка «Недопустимое имя столбца» при вызове вставки после создания таблицы
- microsoft sql server 2012 express edition - ограничение одновременных вставок
- Экземпляр по умолчанию для SQL Server 2012 не работает
- 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 ')
Ждем вашей помощи.
- SQL Server - та же таблица в нескольких схемах
- СОЗДАТЬ МАСТЕР-КЛЮЧ - Ошибка проверки пароля
- Как просмотреть запрос, который использовался для создания таблицы?
- Разрешить удаленное подключение только для определенных пользователей
- SQL Server 2012: Вход в систему PC-NAME \ SQLEXPRESS работает, но не локально / (локально)
- Получить файл .sql из базы данных SQL Server 2012
- Как получить значения за все месяцы в T-SQL
- Сбой базы данных SQL Server 2012 Express
Кроме решения @ 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()
.