mariadb 创建表选择的问题,其中选择是联合

问题描述 投票:0回答:1

我正在使用一个六路联合选择,它是 PHP 脚本的一部分。该命令在脚本中运行良好。从 SQL 客户端执行时,该命令也可以正常工作。但是,当我尝试将 SELECT 放入 CREATE TABLE mytable SELECT 中时,我收到如下错误消息:

Incorrect column name ''

在五个联合段中,有一个列名“”,它是稍后在脚本中填充的数据的占位符。但在其中一个联合中,同一位置有 varchar(32) 列。

正常执行的命令似乎并不关心有“匿名”列。但在 CREATE TABLE 版本中却不是这样。

为什么联合列名的 SELECT 和 CREATE TABLE SELECT 有不同的规则?

mysql select mariadb union create-table
1个回答
0
投票

表格不能包含名称为空或缺失的列。结果集可以。并且

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

不是,因为您没有为第一列分配别名列名称。

© www.soinside.com 2019 - 2024. All rights reserved.