Я получаю ошибку 3802 при выполнении запроса SQL в Teradata SQL - PullRequest
1 голос
/ 23 января 2020

Я выполняю следующий запрос.

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] [TeraJDB ​​C 16.20.00.08] [Ошибка 3802] [SQLState 42S02] База данных 'd' не существует. "]

Тем не менее, я могу выполнить запрос select * from data4, что означает, что data4 существует.

Было бы здорово, если вы, ребята, можете помочь мне выяснить, что вызывает эту ошибку.

Многие Заранее спасибо.

1 Ответ

0 голосов
/ 24 января 2020

Когда вы создаете таблицу с подвыбором независимо от типа таблицы, чтобы поместить столбцы как 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;
...