Greenplum: копировать данные между таблицами - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно скопировать данные из таблицы 1 и таблицы 2 в таблицу 3. Я попытаюсь выполнить этот запрос:

WITH sel AS (
    SELECT 
        er.local_company_pk as "local_company_pk",
        dv.load_dtm as "load_dtm",
        dv.src as "rec_src",
        dv.companyogrn as "ogrn",
        dv."CompanyID" as "company_spark_id",
        dv.companyvat as "company_vat",
        dv."CompanyCountryCode" as "company_country_code",
        dv."CompanyShortName" as "company_short_name",
        dv."CompanyFullName" as "company_full_name",
        dv."CompanySize" as "company_size",
        dv."CompanyRevenue" as "company_revenue",
        dv."StaffQuantity" as "staff_quantity",
        dv."CompanyRegionName" as "company_region_name",
        dv."CompanyCityName" as "company_city_name",
        dv."RegistrationDT" as "registration_dt",
        dv."EndDT" as "end_dt",
        dv."CompanyStatus" as "company_status",
        dv."FailureIndex" as "failure_index",
        dv."IndexOfDueDiligence" as "index_of_due_diligence",
        dv."ConsolidateIndex" as "consolidate_index",
        ' ' as "hash_diff"
    FROM
        table1 as dv,
        table2 as er
    WHERE 
        er.inn = dv.companyvat
    LIMIT 10
)
INSERT INTO
    table3
SELECT * 
FROM sel

И у меня ошибка SQL Error [42601]: ERROR: syntax error at or near "INSERT"

Как я могу вставить в table3 из выбора между table1 и table2?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Зачем использовать CTE?

INSERT INTO table3
   SELECT 
        er.local_company_pk as "local_company_pk",
        dv.load_dtm as "load_dtm",
        dv.src as "rec_src",
        dv.companyogrn as "ogrn",
        dv."CompanyID" as "company_spark_id",
        dv.companyvat as "company_vat",
        dv."CompanyCountryCode" as "company_country_code",
        dv."CompanyShortName" as "company_short_name",
        dv."CompanyFullName" as "company_full_name",
        dv."CompanySize" as "company_size",
        dv."CompanyRevenue" as "company_revenue",
        dv."StaffQuantity" as "staff_quantity",
        dv."CompanyRegionName" as "company_region_name",
        dv."CompanyCityName" as "company_city_name",
        dv."RegistrationDT"::text as "registration_dt",
---------------------------^ you can cast the value
        dv."EndDT" as "end_dt",
        dv."CompanyStatus" as "company_status",
        dv."FailureIndex" as "failure_index",
        dv."IndexOfDueDiligence" as "index_of_due_diligence",
        dv."ConsolidateIndex" as "consolidate_index",
        ' ' as hash_diff
    FROM table1 as dv JOIN
         table2 as er
         ON er.inn = dv.companyvat
    LIMIT 10

Я также исправил неправильный синтаксис JOIN.

0 голосов
/ 10 апреля 2020

Как определяется registration_dt в table3? Если это уже дата, нет необходимости приводить ее в свой SELECT. Сообщение об ошибке указывает, что оно определено как дата.

...