【问题标题】:Insert 2 values from two different tables into one table将两个不同表中的 2 个值插入到一个表中
【发布时间】:2016-07-03 09:51:36
【问题描述】:

在插入到第三个表的过程中,我遇到了从 2 个不同表中插入 2 个值的问题。

第一个表是:

  • author_id (PK)
  • 作者姓名
  • 作者电子邮件

第二张表是:

  • category_id (PK)
  • 类别名称

第三张表是:

  • 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 ')

期待您的帮助。

【问题讨论】:

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


    【解决方案1】:

    除了@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。但我认为这只是一个例子。

    【讨论】:

      【解决方案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 并使用ON() 子句。

      【讨论】:

      • 谢谢你的回答:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多