将两个不同表中的2个值插入一个表中

时间:2016-07-03 09:51:37

标签: sql sql-server sql-server-2012-express

我在插入第三个表时插入来自2个不同表的2个值存在问题。

第一张表是:

  • author_id(PK)
  • AUTHOR_NAME
  • AUTHOR_EMAIL

第二张表是:

  • category_id(PK)
  • 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 ')

期待您的帮助。

2 个答案:

答案 0 :(得分:3)

除了@ sagi的解决方案,你应该能够在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_nameauthor_name不唯一,则会失败。

顺便说一句,你可能想要返回类别/作者 id 而不是 name ,因为根本不需要当前的SELECT。但我认为这只是一个例子。

答案 1 :(得分:2)

您需要将这些表连接在一起:

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并使用{ {1}}条款。