我正在运行以下查询。
create multiset volatile table table1 as (
select
a.variable1,
a.variable2,
b.variable3,
b.variable4,
c.variable5,
c.variable6,
d.variable7,
d.variable8
from data1 as a
left join data2 as b
on a.ID1=b.ID1 and a.date1=b.date1
left join data3 as c
on a.ID1=c.ID1 and a.date1=c.date1
left join data4 as d
on a.ID1=d.ID1 and a.date1=d.date1
where a.variable1>100 and a.varaiable2 in ('A','B'))
with data primary index (id1,id2,id3,date1) on commit preserve rows ;
我遇到了错误- PreparedStatementCallback;错误的SQL语法[];嵌套的异常是java.sql.SQLException:[Teradata数据库] [TeraJDBC 16.20.00.08] [错误3802] [SQLState 42S02]数据库'd'不存在。” ]
但是,我能够运行查询select * from data4,这意味着data4确实存在。
如果你们能帮助我找出导致此错误的原因,那将是很好的。
非常感谢。
答案 0 :(得分:0)
在创建带有子选择的表时,无论表的类型如何,为了将列作为PI放置在括号之外,必须在内部选择它们,否则解析引擎将不知道这些列是什么以及从何处得到他们。
在这种情况下,您需要:
A.ID1 AS ID1,
B.ID1 AS ID2,
C.ID1 AS ID3,
A.DATE1 AS DATE1,
尝试一下:
CREATE MULTISET VOLATILE TABLE TABLE1 AS (
SELECT
A.ID1 AS ID1,
B.ID1 AS ID2,
C.ID1 AS ID3,
A.DATE1 AS DATE1,
A.VARIABLE1,
A.VARIABLE2,
B.VARIABLE3,
B.VARIABLE4,
C.VARIABLE5,
C.VARIABLE6,
D.VARIABLE7,
D.VARIABLE8
FROM DATA1 AS A
LEFT JOIN DATA2 AS B
ON A.ID1=B.ID1 AND A.DATE1=B.DATE1
LEFT JOIN DATA3 AS C
ON A.ID1=C.ID1 AND A.DATE1=C.DATE1
LEFT JOIN DATA4 AS D
ON A.ID1=D.ID1 AND A.DATE1=D.DATE1
WHERE A.VARIABLE1>100 AND A.VARIABLE2 IN ('A','B')
)
WITH DATA
PRIMARY INDEX (ID1,ID2,ID3,DATE1)
ON COMMIT PRESERVE ROWS;