2015-04-08 42 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'和'。'之間出現。 –