组合 INSERT INTO 和 SELECT 以获得多个 VALUES
Combine INSERT INTO and SELECT for multiple VALUES
我知道将多个新行插入 table 的最常见方法是:
INSERT INTO fruits (fruit, colorId)
VALUES ('apple', 1),
('orange', 2),
('strawberry', 3);
我也知道我可以插入从 SELECT 获得的结果,甚至使用自定义值:
INSERT INTO fruits (fruit, colorId)
SELECT 'pear', id
FROM colors
WHERE color = 'green';
事情是,使用这些选项中的任何一个(或者可能是不同的选项,我不知道),我想使用在这样的查询中获得的结果插入多个值。例如:
SELECT id
FROM colors
WHERE color = 'yellow';
会 return 单个值 4
(yellow
的 ID),我想在多个插入查询中重用它,例如
INSERT INTO fruits (fruit, colorId)
VALUES ('banana', id),
('lemon', id);
(其中 id
应该是 4
)。可能吗?
编辑: 顺便说一句,我也想避免使用像
这样的子查询
INSERT INTO fruits (fruit, colorId)
VALUES ('banana', (SELECT id FROM colors WHERE color = 'yellow')),
('lemon', (SELECT id FROM colors WHERE color = 'yellow'));
像这样:
INSERT INTO fruits(fruit, colorid)
SELECT names.name, colors.id
FROM colors
CROSS JOIN (
SELECT 'banana' AS name UNION ALL
SELECT 'lemon'
) AS names
WHERE colors.color = 'yellow'
在 MySQL 8 中你可以使用 table value constructor:
INSERT INTO fruits(fruit, colorid)
SELECT names.column_0, colors.id
FROM colors
CROSS JOIN (VALUES
ROW('banana'),
ROW('lemon')
) AS names
WHERE colors.color = 'yellow'
顺便说一句,你可以像下面那样做:
DECLARE @Id INT
SET @Id = (SELECT id FROM colors WHERE color = 'yellow')
INSERT INTO fruits (fruit, colorId)
VALUES ('banana', @Id),
('lemon', @Id);
我知道将多个新行插入 table 的最常见方法是:
INSERT INTO fruits (fruit, colorId)
VALUES ('apple', 1),
('orange', 2),
('strawberry', 3);
我也知道我可以插入从 SELECT 获得的结果,甚至使用自定义值:
INSERT INTO fruits (fruit, colorId)
SELECT 'pear', id
FROM colors
WHERE color = 'green';
事情是,使用这些选项中的任何一个(或者可能是不同的选项,我不知道),我想使用在这样的查询中获得的结果插入多个值。例如:
SELECT id
FROM colors
WHERE color = 'yellow';
会 return 单个值 4
(yellow
的 ID),我想在多个插入查询中重用它,例如
INSERT INTO fruits (fruit, colorId)
VALUES ('banana', id),
('lemon', id);
(其中 id
应该是 4
)。可能吗?
编辑: 顺便说一句,我也想避免使用像
这样的子查询INSERT INTO fruits (fruit, colorId)
VALUES ('banana', (SELECT id FROM colors WHERE color = 'yellow')),
('lemon', (SELECT id FROM colors WHERE color = 'yellow'));
像这样:
INSERT INTO fruits(fruit, colorid)
SELECT names.name, colors.id
FROM colors
CROSS JOIN (
SELECT 'banana' AS name UNION ALL
SELECT 'lemon'
) AS names
WHERE colors.color = 'yellow'
在 MySQL 8 中你可以使用 table value constructor:
INSERT INTO fruits(fruit, colorid)
SELECT names.column_0, colors.id
FROM colors
CROSS JOIN (VALUES
ROW('banana'),
ROW('lemon')
) AS names
WHERE colors.color = 'yellow'
顺便说一句,你可以像下面那样做:
DECLARE @Id INT
SET @Id = (SELECT id FROM colors WHERE color = 'yellow')
INSERT INTO fruits (fruit, colorId)
VALUES ('banana', @Id),
('lemon', @Id);