首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建新表时,SQL会自动忽略或删除重复列。

创建新表时,SQL会自动忽略或删除重复列。
EN

Stack Overflow用户
提问于 2018-05-13 19:05:04
回答 3查看 1.7K关注 0票数 1

我想从SQL查询中创建一个新表,但是我一直得到

#1060 -重复列名idvisit

这个查询工作正常,但是当我试图创建一个表时,我总是会收到一个错误。

代码语言:javascript
运行
复制
CREATE TABLE marketin_testDatabase.results AS
SELECT *
    FROM marketin_yolopiwik.matomo_log_link_visit_action
    LEFT OUTER JOIN marketin_yolopiwik.matomo_log_visit
    ON marketin_yolopiwik.matomo_log_visit.idvisit = 
        marketin_yolopiwik.matomo_log_link_visit_action.idvisit;
EN

回答 3

Stack Overflow用户

发布于 2018-05-13 19:08:18

两个表中似乎都有共同的列名。因此,别名表,而不是星号,分别写入所有列名:

代码语言:javascript
运行
复制
CREATE TABLE marketin_testDatabase.results AS
  SELECT a.idvisit, a.col1, a.col2 ....,
                    v.col1, v.col2 .... 
    FROM marketin_yolopiwik.matomo_log_link_visit_action a
    LEFT OUTER JOIN marketin_yolopiwik.matomo_log_visit v
    ON ( v.idvisit = a.idvisit );

如果只有常见的列名是idvisit,那么可以在星号中使用以下内容:

代码语言:javascript
运行
复制
CREATE TABLE marketin_testDatabase.results AS
  SELECT a.*,
         v.col1, v.col2 .... -- all columns of "matomo_log_visit" except idvisit
    FROM marketin_yolopiwik.matomo_log_link_visit_action a
    LEFT OUTER JOIN marketin_yolopiwik.matomo_log_visit v
    ON ( v.idvisit = a.idvisit );
票数 1
EN

Stack Overflow用户

发布于 2018-05-13 19:08:32

这不是很明显吗?这两个表都有一个名为idvisit的列。如果这是唯一重复的列名,则可以使用:

代码语言:javascript
运行
复制
CREATE TABLE marketin_testDatabase.results AS
    SELECT *
    FROM marketin_yolopiwik.matomo_log_link_visit_action lva LEFT JOIN
         marketin_yolopiwik.matomo_log_visit lv
         USING (idvisit);

但是,最好显式列出列。一个快捷方式是从更宽的表中获取列,然后将其余的列从另一个表中列出:

代码语言:javascript
运行
复制
CREATE TABLE marketin_testDatabase.results AS
    SELECT lva.*, lv.?, lv.?, . . .
    FROM marketin_yolopiwik.matomo_log_link_visit_action lva LEFT JOIN
         marketin_yolopiwik.matomo_log_visit lv
         USING (idvisit);
票数 0
EN

Stack Overflow用户

发布于 2018-05-13 19:09:30

MySQL中没有忽略CREATE语句中重复列的选项。

您应该避免使用SELECT *。在本例中,它提供重复的列名,因为您连接了包含同名列的表。

您必须写出要保留的列列表,而不是使用SELECT *。对于"select *除了少数几个“没有查询语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50319692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档