带有联合的MYSQl查询失败

Posted

技术标签:

【中文标题】带有联合的MYSQl查询失败【英文标题】:MYSQl Query with union is failing 【发布时间】:2011-04-20 10:37:03 【问题描述】:

我有两张桌子 A 和 B 我想将它们合并并存储到另一个表中;

CREATE TABLE  myspace.test (
(select * from A ) UNION ( select * from B) );

失败并出现错误

您的 SQL 语法有错误; 检查对应的手册 您的 mysql 服务器版本 在 'CREATE TABLE 附近使用正确的语法 myspace.test ( (select * from A ) UNION ( s' 在第 1 行

但查询:(select * from A ) UNION ( select * from B) 给出了正确的结果。

如何将联合结果存储到另一个表中??

谢谢阿曼。

编辑

玩了一圈之后发现:

没有外括号的查询有效。

创建表 myspace.test (从 A 中选择 *) UNION (从 B 中选择 *);

添加 AS 并不能解决问题。

我想知道带括号的查询运行良好似乎是个错误,或者我可能遗漏了什么?

创建表 myspace.test (从 A 中选择 *);

【问题讨论】:

【参考方案1】:
CREATE TABLE
        myspace.test
AS
SELECT  *
FROM    A
UNION
SELECT  *
FROM    B

【讨论】:

不错的解决方案。如果表 A 和 B 中没有定义自动增量 ID,这将真的有效。如果有,那么它很可能有重复。 @Skorpioh:@op 声明他的查询返回正确的结果(不管他的意思是什么)。我所做的只是一点语法修正。 AS 不是问题,我在合并时不允许使用外括号。我只是添加了编辑。【参考方案2】:

阅读documentation。 select-statement 周围没有括号。

CREATE TABLE `myspace`.`test` (SELECT * FROM `A`) UNION (SELECT * FROM `B`);

不过,请注意重复的主键。您可能需要考虑首先创建一个具有适当布局的空表myspace.test,然后更有选择性地向其中插入行。

【讨论】:

很好,但为什么 CREATE TABLE myspace.test` (SELECT * FROM A)` 语句有效? @Arman:不确定。查看文档中的语法。 有人找出区别吗?出于美学目的,我总是使用括号创建表格。不知何故,在创建表中使用UNION 会有所不同。非常令人费解。 @Heisenberg:这并不令人费解,也并不重要。就是这样。【参考方案3】:

这乍一看不太对。

首先使用 CREATE TABLE 创建新的空表。

然后运行查询来填充它,应该类似于

INSERT INTO newTable(field1, field2,..., fieldN)
SELECT temp.field1, temp.field2,...,temp.fieldN
FROM
(
    SELECT field1, field2,...,fieldN
    FROM A
    UNION
    SELECT field1, field2,...,fieldN
    FROM B
) temp

希望这会有所帮助!

【讨论】:

@Scorpioh:谢谢,但很遗憾我无法创建 newTable,因为结果的布局未知。

以上是关于带有联合的MYSQl查询失败的主要内容,如果未能解决你的问题,请参考以下文章

MySQL线上偶然联合索引查询失败,导致全表扫描,正常查询索引都命中了

带有重复子查询的mySQL select联合查询工作缓慢

带有联合错误的 MySQL 视图 - “视图的 SELECT 包含 FROM 子句中的子查询”

mysql 联合查询 如何查询从表的最后一条记录

mysql 多表联合查询啥用

mysql 三表联合查询