使用UNION创建临时表时出现问题

7

我有一个UNION语句,它本身可以正常执行:

SELECT "1999999999" AS MobileNo, "Test" AS FirstName, "Last" AS LastName, "268" AS TemplateID, "" AS MISC1, "" AS MISC2 UNION SELECT cust.cellp AS MobileNo, acct.firstname AS FirstName, acct.lastname AS LastName, "268" AS TemplateID, "" AS MISC1, "" AS MISC2 FROM acct INNER JOIN cust ON (cust.socsec=acct.socsec)

然而,当我试图用CREATE TEMPORARY TABLE包装它时:

CREATE TEMPORARY TABLE temptable (SELECT "1999999999" AS MobileNo, "Test" AS FirstName, "Last" AS LastName, "268" AS TemplateID, "" AS MISC1, "" AS MISC2 UNION SELECT cust.cellp AS MobileNo, acct.firstname AS FirstName, acct.lastname AS LastName, "268" AS TemplateID, "" AS MISC1, "" AS MISC2 FROM acct INNER JOIN cust ON (cust.socsec=acct.socsec))

我遇到了这个错误:
ERROR 1064 (42000):您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式。位于第1行“UNION SELECT cust.cellp AS MobileNo,acct.firstname AS FirstName,ac”的附近
两个SELECT语句在CREATE TEMPORARY TABLE中都可以正常工作,只有UNION不起作用。MySQL返回的错误含糊不清,因此我无法确定问题出在哪里。我尝试将每个SELECT语句放在括号中,但它也不喜欢。
理论上,我知道可以使用一个SELECT创建临时表,然后将第二个SELECT的数据添加到表中,但在这种情况下,这种解决方案并不可行,因为我正在使用报表生成器,它非常严格,只允许单个MySQL语句作为输入,因此除非我想重新设计整个系统(我不想,也不会有人想让我现在花时间在那上),否则我必须找到一种方法使其在单个MySQL语句中正常工作。
你认为我错在哪里?
1个回答

9
这里有一个解决方法:
CREATE TABLE AS
   SELECT *
   FROM (
       SELECT ...
       UNION ALL
       SELECT ...
   ) AS foo

你不能直接对create table进行联合,但是可以将其作为子查询:

mysql> create table foo as (select * from ((select 'foo') union all (select 'bar')) as foo);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接