我想从SQL查询中创建一个新表,但是我一直得到
#1060 -重复列名
idvisit
这个查询工作正常,但是当我试图创建一个表时,我总是会收到一个错误。
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;
发布于 2018-05-13 19:08:18
两个表中似乎都有共同的列名。因此,别名表,而不是星号,分别写入所有列名:
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
,那么可以在星号中使用以下内容:
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 );
发布于 2018-05-13 19:08:32
这不是很明显吗?这两个表都有一个名为idvisit
的列。如果这是唯一重复的列名,则可以使用:
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);
但是,最好显式列出列。一个快捷方式是从更宽的表中获取列,然后将其余的列从另一个表中列出:
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);
发布于 2018-05-13 19:09:30
MySQL中没有忽略CREATE语句中重复列的选项。
您应该避免使用SELECT *
。在本例中,它提供重复的列名,因为您连接了包含同名列的表。
您必须写出要保留的列列表,而不是使用SELECT *
。对于"select *除了少数几个“没有查询语法。
https://stackoverflow.com/questions/50319692
复制相似问题