使用UNION的CREATE TABLE SELECT的Mariadb问题排除
P粉115840076
P粉115840076 2023-08-02 11:25:48
0
1
545
<p>我正在处理一个包含六个UNION SELECT的PHP脚本,并且在脚本中这个命令运行得很好。在从SQL客户端执行时,这个命令也能正常工作。然而,当我尝试将SELECT语句放在CREATE TABLE mytable SELECT的内部时,我得到了以下错误消息:</p> <pre class="brush:php;toolbar:false;">Incorrect column name ''</pre> <p>在六个UNION SELECT的片段中,有五个片段中存在一个名为''的列名,该列名在脚本的后续部分填充数据时作为占位符使用。但在其中一个UNION中,同样的位置是一个varchar(32)列。<br /><br />似乎在正常执行的命令中并不在意存在一个"匿名"列。但在CREATE TABLE版本中,它不喜欢这样。<br /><br />为什么SELECT和CREATE TABLE SELECT对于union列名有不同的规则?</p><p><br /></p>
P粉115840076
P粉115840076

全部回复(1)
P粉821231319

Tables不能包含空白或缺失的列名,而结果集可以。而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

不适用,因为它没有给第一列分配一个别名列名。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!