我有2个表格,广告客户和广告系列。两者都有我需要列出的更多字段,并且都有一个主键“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'
答案 0 :(得分:8)
您可以使用using
形式join
代替on
子句在MySQL(和其他标准数据库)中执行此操作。
不幸的是,您可以在此处执行此操作,因为连接键在两个表中具有不同的ID。如果它们具有相同的名称,您只需执行以下操作:
创建视图VIEW_CAMPAIGNS AS 选择 *, 来自广告系列c加入 广告商 使用(advertisers_id);
你最接近的是选择较大的表格,然后使用*
,然后列出另一个表格的所有列。
或者,更好的是,只需使用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')
答案 1 :(得分:0)
你可以这样做
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)。编辑:
别名可用于单个列。
您必须为每列添加别名