2015-04-08 117 views
0

我试图运行下面的查询加入使用通配符表和避免重复列

create multiset volatile table newTable, no log as (
SELECT so.*, pu.* 
FROM db.table1 so 
left outer join db.table2 pu on so.id = pu.id 
) with data primary index(id) on commit preserve rows; 

Teradata的是给我下面的错误:由于指数的

[TeraJDBC 15.00.00.20] [Error 3809] [SQLState 42S02] Column 'id' is ambiguous.

我想创建通过ID列。那么我的问题是,是否有办法避免让连接列重复或消除索引的歧义?

+0

您不需要在两个表中都使用select *。您必须指定要选择的列,并为具有匹配名称的列进行别名。 – Andrew

+0

so和po有列id。因此,在子查询中,您特别为每个id列指定了不同的列名称。 –

+0

指定列名是当前解决问题的方法。我正在改变它,因为列的数量非常大,并且经常变化,因此会出现错误。 –

回答

1

这是由于so.*, pu.*,两个表都有一个名为id的列,因此您尝试创建一个具有相同列名的表两次。

*更改为列列表并排除id或添加别名,例如, so.id as so_id

+0

我对这种解决方案感兴趣的原因正是因为它避免列出列名:我有太多的列和模式经常变化,以确保一切都是连贯的。 –

+1

没有解决方法,选择列数较少的表格并保留另一个列表的'*'... – dnoeth

0

这条线:

with data primary index(id) 

哪个表是 “ID” 这里应该是从?这是你的错误所在。

+0

我意识到,我问的是,如果有一些简单的方法来消除名称 –

+0

如果“ID”来自表“db.table1”,那么既然你已经设置了别名“so”,那么你所需要的就是“so.id”,就像你之前在代码中所做的那样。 – Russ

+0

我已经试过了,相应的错误是[TeraJDBC 15.00.00.20] [错误3706] [SQLState 42000]语法错误:期望在单词'so'和'。'之间出现。 –