将来自两个不同 table 的 2 个值插入一个 table
Insert 2 values from two different tables into one table
我在插入到第三个 table 的过程中从 2 个不同的 table 插入 2 个值时遇到问题。
第一个table是:
- author_id(PK)
- author_name
- author_email
第二个table是:
- category_id(PK)
- category_name
第三个table是:
- post_id
- post_category
- post_author
- post_title
- post_content
- post_date
并且我想在将数据插入第三个 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_name
或 author_name
不唯一,这将失败。
顺便说一句,您可能想要 return category/author id 而不是 name,因为current SELECT 根本不需要。但我认为这只是一个例子。
我在插入到第三个 table 的过程中从 2 个不同的 table 插入 2 个值时遇到问题。
第一个table是:
- author_id(PK)
- author_name
- author_email
第二个table是:
- category_id(PK)
- category_name
第三个table是:
- post_id
- post_category
- post_author
- post_title
- post_content
- post_date
并且我想在将数据插入第三个 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_name
或 author_name
不唯一,这将失败。
顺便说一句,您可能想要 return category/author id 而不是 name,因为current SELECT 根本不需要。但我认为这只是一个例子。