mysql - sql中insert语句中的select语句返回多行

标签 mysql sql

我在 mysql 中有以下结构化查询。但它返回一个错误。基本上,我想从现有表中获取值(value)并插入到新表中。我尝试了以下操作,但出现错误;

INSERT INTO `table1`(
    `first`,`second`,`third`) VALUES(

    (SELECT table2.timemodified FROM `xtable` AS table2,`ytable` AS table3 
        WHERE table3.id = table2.contextid),

    (SELECT table4.id FROM `ztable` AS table4,`ytable` AS table3 WHERE table4.id = table3.instanceid),

    (SELECT murs.id FROM `table5` AS murs,
    `xtable` AS table2, 
    `wtable` AS table6, 
    `ytable` AS table3, 
    `vtable` AS table7 
    WHERE murs.id = table2.userid AND table6.id = table2.roleid AND table3.id = table2.contextid AND table7.instance = table3.instanceid AND table6.id =3)
);

我测试过,但错误是:#1242 - 子查询返回多于 1 行。问题是我从 insert 中的 select 查询中获得了不止一条记录。我怎样才能消除这样的错误。

最佳答案

整个查询如下所示。将 * 替换为您要选择的列名!

INSERT INTO table1(first,second,third)

-- replace * with columns name first,second,third
select * from (
-- START YOU'RE select query
(SELECT table2.timemodified FROM `xtable` AS table2,`ytable` AS table3 
        WHERE table3.id = table2.contextid),

    (SELECT table4.id FROM `ztable` AS table4,`ytable` AS table3 WHERE table4.id = table3.instanceid),

    (SELECT murs.id FROM `table5` AS murs,
    `xtable` AS table2, 
    `wtable` AS table6, 
    `ytable` AS table3, 
    `vtable` AS table7 
    WHERE murs.id = table2.userid AND table6.id = table2.roleid AND table3.id = table2.contextid AND table7.instance = table3.instanceid AND table6.id =3)
-- END YOU'RE select query
)

我将您的选择语句移到了子查询中,这样您就可以使用子查询的总结果来获得优势。

关于mysql - sql中insert语句中的select语句返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36030370/

相关文章:

Java Spring JDBC last_insert_id() 方法

mysql - 如何将 DB2 中的 for 语句转换为 MYSQL

c# - 方法 "ToString"没有重载需要 1 个参数

php - 将自定义查询转换为 SQL

java - 在IDEA中为特定字符串启用sql语法高亮

php - 静态变量连接先前的结果值 php

mysql - 如何向现有表添加唯一键(具有非唯一行)

python - 在 Pyodbc 中使用哪个版本的 MySQL 驱动程序

mysql - 根据列在结果中的位置更新列

sql - 许多用户可以打开一个带有临时表的 SP 吗?