Postgres создать таблицу как из нескольких соединений
У меня есть проблема с датаминированием с очень большим количеством атрибутов (>15 000). Я представляю данные в нескольких таблицах с общим полем Id. Удалив пустые атрибуты, я хочу объединить полученные меньшие таблицы, чтобы вычислить корреляции для удаления избыточных атрибутов.
Я могу легко присоединиться к таблицам с помощью:
select * from lrg_bin0 k0
join lrg_bin1 k1 on k0.id = k1.id
join lrg_bin2 k2 on k0.id = k2.id
join lrg_bin3 k3 on k0.id = k3.id
Но когда я пытаюсь создать новую таблицу с:
Create table mrg0 as (
select * from lrg_bin0 k0
join lrg_bin1 k1 on k0.id = k1.id
join lrg_bin2 k2 on k0.id = k2.id
join lrg_bin3 k3 on k0.id = k3.id
)
Postgress жалуется, что "столбец" id "указан более одного раза"
Тот самый большое количество атрибутов означает, что я делаю все программно, поэтому ответы на запросы, которые я могу генерировать, будут оценены.
2 ответа:
Используйте
using
вместоon
create table mrg0 as select * from lrg_bin0 k0 join lrg_bin1 k1 using (id) join lrg_bin2 k2 using (id) join lrg_bin3 k3 using (id)
Кроме того, использование подразумевает, что только один из каждой пары эквивалентных столбцов будет включен в выходные данные соединения, а не оба
Проблема заключается в том, что в SQL при выполнении соединения с помощью on соответствующий столбец будет включен один раз для каждой таблицы, в которой он находится. Что вы можете сделать, так это указать, в какой таблице вы хотите получить столбец из ala:
Create table mrg0 as ( select k1.id, ... from lrg_bin0 k0 join lrg_bin1 k1 on k0.id = k1.id join lrg_bin2 k2 on k0.id = k2.id join lrg_bin3 k3 on k0.id = k3.id )