MySQL如何使用SELECT子查询返回多行来插入表?
INSERT INTO Results
(
People,
names,
)
VALUES
(
(
SELECT d.id
FROM Names f
JOIN People d ON d.id = f.id
),
(
"Henry"
),
);
我想要来填充新表,其中包含从此子查询返回的所有结果。如何在不获取 ERROR 1242(21000)的情况下执行此操作:子查询返回的行数超过1行
答案 0 :(得分:105)
INSERT INTO Results (People, names )
SELECT d.id, 'Henry'
FROM Names f
JOIN People d ON d.id = f.id
将静态字符串Henry
与您的SELECT
查询相结合。
答案 1 :(得分:11)
INSERT INTO Results
(
People,
names,
)
VALUES
(
(
SELECT d.id
FROM Names f
JOIN People d ON (d.id = f.id) limit 1
),
(
"Henry"
),
);
答案 2 :(得分:7)
以下是我发现效果很好的内容。它有点长,但很多时候需要改变额外的数据。
使用值从table2向table1插入多行。 实施例:
hidden
您可以插入硬编码值以使用重复数据插入多行:
INSERT INTO table1 (col1, col2, col3, col4, col5)
SELECT col1,col2,col3,col4,col5
FROM table2 t2
WHERE t2.val2 IN (MULTIPLE VALUES)
AND (Another Conditional);
请注意:“Value”,“1900-01-01”,“9999-12-31”将在所有插入的行中重复。
答案 3 :(得分:5)
INSERT INTO Results
(
People,
names,
)
SELECT d.id, 'Henry'
FROM Names f
JOIN People d ON d.id = f.id
答案 4 :(得分:1)
此错误的原因(子查询返回多于1行)是您使用括号()。仔细看看最好的答案。它不包含子查询周围的parethesis
答案 5 :(得分:1)
在MySql中,可以插入来自字符串的多个值,如下所示,避免重复。感谢。
insert into brand(name) select * from (
select 'Fender' as name
union select 'a'
union ..... ) t
where not exists (select 1 from brand t2 where t2.name COLLATE latin1_general_ci = t.name COLLATE utf8mb4_unicode_ci )
答案 6 :(得分:-1)
插入ec_element(parentid,name)从ec_element中选择elementid,'STARTUP',其中name ='BG';
insert语句从条件满足的表和标签字符串中获取elementid值。