无法从具有多个联接的选择查询中创建临时表。抛出“重复的列名'id'

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

这是引起问题的查询:

CREATE TEMPORARY TABLE fetchedCropVariety ENGINE = MEMORY 
SELECT *
     , hz.zoneName
     , i.fullImageUrl
     , i.previewImageUrl
     , u.userName
  FROM seedrecord s
  LEFT 
  JOIN HardinessZone hz 
    ON hz.id = s.hardiness_zone_id
  JOIN image i 
    ON s.id = i.seedrecord_id 
  JOIN members u 
    ON s.FK_USER = u.id 
WHERE s.id = 1 
   AND s.deleted = FALSE;

当我执行此查询时,它会引发错误Error Code: 1060. Duplicate column name 'id'seedrecord中没有重复的名为id的列,因此这是由其他表中的一个或多个id列引起的,这些列仅用于连接它们以检索zoneNamefullImageUrl

当我从查询中删除*,时,查询会运行,但是seedrecord中的所有字段都将被省略。一定是idseedrecord列与hardinessZonemembers的id列发生了某种冲突,但我没有试图将这2个表的id字段包含到我要创建的临时表中所以这个错误真的让我感到困惑。

谁能告诉我我该怎么做才能阻止此错误的发生?

谢谢

mysql select left-join inner-join
1个回答
0
投票

不要做

select *

将使用您的“从子句”中包含的所有克隆体

并且您至少有两个名为id的列

改为使用

S.*,u.*

依此类推

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