2016-07-03 2 views
1

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

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

  • author_id (ПК)
  • author_name
  • author_email

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

  • category_id (ПК)
  • category_name

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

  • POST_ID
  • post_category
  • post_author
  • post_title
  • POST_CONTENT
  • POST_DATE

и я хочу получить 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 ') 

Ждем вас с вашей помощью.

ответ

1

Кроме решения @ Саг Вам необходимо иметь возможность использовать скалярные подзапросы в 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 не является уникальным.

Btw, вы, вероятно, хотите, чтобы вернуться к категории/автору идентификатора вместо имени, потому что ток ВЫБРАТЬ не нужен. Но я предполагаю, что это был всего лишь пример.

+0

Этот тоже работает, спасибо! :) – n3stis

1

Вы должны присоединиться к этим таблицам вместе:

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().

+0

Спасибо за ваш ответ :) – n3stis

Смежные вопросы