带有联合的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线上偶然联合索引查询失败,导致全表扫描,正常查询索引都命中了