Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用选定数据执行多个插入_Mysql_Sql - Fatal编程技术网

Mysql 使用选定数据执行多个插入

Mysql 使用选定数据执行多个插入,mysql,sql,Mysql,Sql,我想执行这个sudo查询: INSERT INTO table1 (foreign_key, meta_key, meta_value) VALUES ( (SELECT id FROM table2 WHERE condition = 'met'), 'first meta key', 'first meta value' ) VALUES ( (SELECT id FROM table2 WHERE condition = 'met'), 'second meta key

我想执行这个sudo查询:

INSERT INTO table1 (foreign_key, meta_key, meta_value)
VALUES (
     (SELECT id FROM table2 WHERE condition = 'met'), 'first meta key', 'first meta value'
)
VALUES (
     (SELECT id FROM table2 WHERE condition = 'met'), 'second meta key', 'second meta value'
)
VALUES (
     (SELECT id FROM table2 WHERE condition = 'met'), 'third meta key', 'third meta value'
)
其中,
SELECT
语句后面的字符串是
INSERT

我想我的
INSERT SELECT
syntex基本上是正确的,但是我不确定是否有多个
INSERT
。我知道我可以用一个普通的
INSERT
语句这样做,但是我不确定
SELECT
是否在
VALUES
子句中

我正在使用一个实时数据库,虽然我已经备份了所有内容,但我希望将直接实验减到最少。

您可以使用UNION:

INSERT INTO table1 (foreign_key, meta_key, meta_value)
SELECT id, 'first meta key', 'first meta value' FROM table2 WHERE condition = 'met'
UNION
SELECT id, 'second meta key', 'second meta value' FROM table2 WHERE condition = 'met'
UNION
SELECT id, 'third meta key', 'third meta value' FROM table2 WHERE condition = 'met'

您需要在值之间添加逗号

INSERT INTO table1 (foreign_key, meta_key, meta_value)
VALUES (
     (SELECT id FROM table2 WHERE condition = 'met'), 'first meta key', 'first meta value'
),
(
     (SELECT id FROM table2 WHERE condition = 'met'), 'second meta key', 'second meta value'
),
(
     (SELECT id FROM table2 WHERE condition = 'met'), 'third meta key', 'third meta value'
)
并确保每个子查询只返回1行

试试这个

或者使用union作为正常方式:

INSERT INTO table1 (foreign_key, meta_key, meta_value)
SELECT id, 'first meta key' , 'first meta value'  FROM table2 WHERE condition = 'met')
UNION ALL
SELECT id, 'second meta key', 'second meta value' FROM table2 WHERE condition = 'met')
UNION ALL
SELECT id, 'third meta key' , 'third meta value'  FROM table2 WHERE condition = 'met')

我可能在这里引起了误会。我将更新这个问题-您能告诉我这是否仍然有效吗?不,您的查询不起作用(我使用的是SQLServer2005),带有union的查询可以工作