SQL - 具有两个相同列名的表

时间:2015-03-20 23:06:01

标签: sql teradata

我有一个包含user_id和权利的表格,其中权利可以是完整游戏或演示,因此如果用户同时玩完整个游戏和演示,给定的user_id最多可以有两行。

我加入了一个包含两列的表格,向我提供有关玩完整个游戏的用户是否已播放该演示的信息。第一列给出了玩完整个游戏的玩家的所有ID,而第二列将在玩家玩过演示时重复ID,如果他/她没有,则重复NULL。

select * from 
(
 (select e.user_id 
    from table1 e 
    where entitlement = 'fullgame') fg
 left join
 (select e.user_id 
    from table1 e 
    where entitlement = 'demo') demo
 on fg.user_id = demo.user_id 
)

现在我的问题是当我尝试将此表连接到包含其他信息(年龄,国家/地区)的表时,Teradata SQL Assistant会给出一个错误,指出有两个同名的列,即user_id

如何编写查询以区分两列。我是否必须先以某种方式重命名其中一个列?

3 个答案:

答案 0 :(得分:0)

您可以使用如下别名:

select * from 
(
 (select e.user_id as userid1
    from table1 e 
    where entitlement = 'fullgame') fg
 left join
 (select e.user_id as userid2
    from table1 e 
    where entitlement = 'demo') demo
 on fg.userid1 = demo.userid2 
)

如果您愿意,可以使用as关键字,或者您可以像e.user_id userid1一样编写它,两者的意思相同。

答案 1 :(得分:0)

您可以将字段名称替换为此

 Select e.user_id fullgameuserid 

答案 2 :(得分:0)

虽然问题已得到解答(即使用as),但您的查询似乎过于复杂。没有理由为连接提供子查询:

select f.user_id, d.user_id as demo_user_id
from table1 f left join
     table1 d
     on f.user_id = d.user_id and
        d.entitlement = 'demo'
where f.entitlement = 'fullgame';

我还认为为第二列设置标志可能更符合您想要完成的任务:

select f.user_id,
       (case when d.user_id is null then 0 else 1 end) as DemoFlag