我正在使用一个六路联合选择,它是 PHP 脚本的一部分。该命令在脚本中运行良好。从 SQL 客户端执行时,该命令也可以正常工作。但是,当我尝试将 SELECT 放入 CREATE TABLE mytable SELECT 中时,我收到如下错误消息:
Incorrect column name ''
在五个联合段中,有一个列名“”,它是稍后在脚本中填充的数据的占位符。但在其中一个联合中,同一位置有 varchar(32) 列。
正常执行的命令似乎并不关心有“匿名”列。但在 CREATE TABLE 版本中却不是这样。
为什么联合列名的 SELECT 和 CREATE TABLE SELECT 有不同的规则?
表格不能包含名称为空或缺失的列。结果集可以。并且
CREATE TABLE SELECT
从 SELECT
语句结果集中的列名获取表的列名。因此,您需要确保结果集的每一列都有一个名称,该名称要么来自某个表中的列,要么来自 AS
别名。例如,
SELECT 'one' AS tablename, cola, colb, colc FROM table_one
UNION ALL
SELECT 'two', cola, colb, colc FROM table_two
UNION ALL
SELECT 'three', cola, colb, colc FROM table_three
适合在 CREATE TABLE 语句中使用,而
SELECT 'one', cola, colb, colc FROM table_one
UNION ALL
SELECT 'two', cola, colb, colc FROM table_two
UNION ALL
SELECT 'three', cola, colb, colc FROM table_three
不是,因为您没有为第一列分配别名列名称。