2015-12-17 3 views
0

очень много нового улья, имеют очень общее представление об этом, так что простите пожалуйста меня, если его глупо:HQL UNION полей из двух таблиц

Ниже данные только пример того, что я пытаюсь сделать, фактические данные действительно огромны.

У меня 2 таблицы:

Таблица A

ID1 источник имя

101 аа SAP

102 бб SAP

103 куб.см SAP

Таблица B

источник имя id2

106 ZZ SAP

107 уу SAP

108 хх SAP

Мне нужно создать еще одну таблицу C со схемой

ID Имя Столица

со всеми идентификаторами и именами из таблицы А и В, а другой столбец «Storage», который должен быть жестко закодированы с «HDFS»

мне нужен выход, как:

имя идентификатор Strorage

101 аа HDFS

102 бб HDFS

103 куб.см HDFS

106 ZZ HDFS

107 уу HDFS

108 хх HDFS

Я пробовал много запросов, но один из них заключается в следующем:

insert into table c select (select * from (select id1 from A union select id2 from B)) as id, (select * from (select name from A union select name from B)) as name , 'HDFS' as Strorage; 

, но он дает ошибку «ParseException линии 1:53 не может распознать ввод рядом с 'select' '*' 'from' в спецификации выражения "

Не уверен, что запрос a m try является правильным, пожалуйста, помогите мне в этом.

Спасибо

ответ

0

Похоже, что (первый) проблема синтаксиса в вашей вставке, а не объединение запросов.Нечто подобное должно работать:

insert into table c select id, name, 'HDFS' from (
    select * from (select id1, name from A union select id2, name from B)); 
+0

Спасибо и так много сэр для ответа: – cynthya

+0

но я получаю ошибку говоря: ParseException линия 3:80 не может распознать вход вблизи «)» ' 'в источнике подзапроса – cynthya

0

Вот рабочий запрос:

insert into table c select distinct * from (select id1, name, 'HDFS' storage from a union all select id1, name, 'HDFS' storage from b) c; 

Некоторые версии не поддерживает союз, есть только объединение всех имитировать союз, вы должны использовать различны.

Когда имена полей различны, вы должны попробовать это:

insert into table c select distinct * from (select id1, name, 'HDFS' storage from a union all select id2 as id1, name, 'HDFS' storage from b) c; 
+0

Спасибо за ответ сэра. Я пробовал это, но получаю сообщение об ошибке: «SemanticException [Error 10004]: Строка 5:22 Недопустимый псевдоним таблицы или столбец« id1 »: (возможные имена столбцов: id2, name)», и когда я изменил его на «id2», в подзапросе я получил ошибку «SemanticException TOK_ALLCOLREF не поддерживается в текущем контексте» – cynthya

+0

Каков окончательный запрос, который вы используете после необходимых изменений? –

+0

Также вставьте DDL из всех трех таблиц –