将来自两个不同 table 的 2 个值插入一个 table

Insert 2 values from two different tables into one table

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

第一个table是:

第二个table是:

第三个table是:

并且我想在将数据插入第三个 table 期间从第一个 table 获取 author_name 并从第二个 table 获取 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 ')

期待您的帮助。

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

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() 子句。

除了@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 不唯一,这将失败。

顺便说一句,您可能想要 return category/author id 而不是 name,因为current SELECT 根本不需要。但我认为这只是一个例子。