mysql 你可以INSERT SELECT多个行而不用每次都对同一行运行select吗?

scyqe7ek  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(111)

如果我有一个表,我需要一个来自另一个值的值,而其他值来自其他地方,我每次都必须运行一个选择吗?

INSERT INTO table1 (name, otherValue) VALUES 
(SELECT name FROM table2 WHERE id = 1, outsideValue1),
(SELECT name FROM table2 WHERE id = 1, outsideValue2),
(SELECT name FROM table2 WHERE id = 1, outsideValue3);

所以每次都是一样的名字,而otherValue不同,我试着批量插入。

h79rfbju

h79rfbju1#

一种方法是将“其他值”放入派生表中,您将与单个源记录交叉连接:

INSERT INTO table1 (name, otherValue)
SELECT t2.name, v.val
FROM table2 t2
CROSS JOIN (
    SELECT 'val1' as val
    UNION ALL SELECT 'val2'
    UNION ALL SELECT 'val3'
) v
WHERE t2.id = 1

在MySQL 8.0.19及更高版本中,我们可以使用VALUES/ROW语法:

INSERT INTO table1 (name, otherValue)
SELECT t2.name, v.val
FROM table2 t2
CROSS JOIN (VALUES 
    ROW('val1'),
    ROW('val2'),
    ROW('val3')
) v(val)
WHERE t2.id = 1

相关问题