Mysql 避免“1060-重复列名”错误,但仍使用SELECT*

Mysql 避免“1060-重复列名”错误,但仍使用SELECT*,mysql,sql,view,key,Mysql,Sql,View,Key,我有两张桌子,广告和广告。两者都有我想要列出的更多字段,并且都有主键id。我想创建一个视图,而不必使用*手动输入所有字段。我不断得到重复列错误。是否可以通过*执行此操作,还是我唯一可以输入所有列名并设置ID别名的选项 CREATE VIEW VIEW_CAMPAIGNS AS SELECT *, advertisers.id as adv_id, campaigns.id as camp_id FROM campaigns, advertisers

我有两张桌子,广告和广告。两者都有我想要列出的更多字段,并且都有主键id。我想创建一个视图,而不必使用*手动输入所有字段。我不断得到重复列错误。是否可以通过*执行此操作,还是我唯一可以输入所有列名并设置ID别名的选项

  CREATE VIEW VIEW_CAMPAIGNS AS 

  SELECT *, 
      advertisers.id as adv_id,
      campaigns.id as camp_id

  FROM  campaigns, advertisers
  WHERE advertisers.id = advertiser_id
仍然返回1060-重复的列名“id”

您可以这样做为什么

  CREATE VIEW VIEW_CAMPAIGNS AS 

  SELECT u.id AS u_id
       ....
  , u2.id AS u2_id

  FROM  campaigns u
  INNER JOIN advertisers u2
  ON u.id = u2.advertiser_id
然后自动对其列进行区分

为了提高性能:更好地使用您只需要的列,而不使用*。不要每次都选择所有列40。 编辑:

别名可用于单个列

您必须为每个列指定别名


选中

您可以在MySQL和其他标准数据库中通过使用连接的形式而不是onclause来实现这一点

不幸的是,您可以在这里这样做,因为连接键在两个表中具有不同的ID。如果他们有相同的名字,你只需要做:

创建查看活动作为 选择*, 从活动c加入 广告商a 使用广告商身份证

最接近的方法是选择较大的表,使用*进行选择,然后列出另一个表的所有列

或者,更好的方法是使用information_schame.columns表生成列名。比如:

select (case when column_name = 'id' and table_name = 'campaigns' then `c.campaign_id`
             when column_name = 'id' and table_name = 'advertisers' then 'a.advertiser_id'
             when table_name = 'campaigns' then concat('c.', column_name)
             when table_name = 'advertisers' then concat('a.', column_name)
        end) as column_name
from information_schema.columns
where table_name in ('campaigns, 'advertisers')

您是想说不能使用SELECT*?是的,您说的*,是指两个表中的所有列,您还显式添加了两个列并为它们提供了一个新别名,这并不会改变您已经从两个表中选择了所有列的事实。谢谢。无法从*中排除列?是。但我也在说不要用句号。最佳做法是始终命名并完全标识所有列。确定。谢谢我现在只需要输入40个列名;我不明白这个答案。你认为。。。意思是如果我需要在那里添加字段名/别名,那么整个任务是毫无意义的。想法是使用*。基本上每个人都说这是不可能的。万分感谢创建查看活动作为选择*,从活动c使用广告客户id加入广告客户a'解决了我的问题,重复科尔