MySQL union не работает с оператором вставки и выбора - PullRequest
0 голосов
/ 01 марта 2019

Я хочу создать SQL-скрипт для извлечения данных из нескольких таблиц и вставки в одну таблицу.

Под подзапросами работает нормально

  1. При запуске их один за другим в INSERT оператор
  2. Оба запроса на выборку работают нормально с union, когда я не использую их в запросе вставки.

, но когда я использую UNION чтобы сделать его одним скриптом, он дает мне syntax error.

INSERT INTO cfx_subscriptions ( cfx_account_id, isv_company_id, license_qty, `status`, created_on, 
subscription_start_date, subscription_end_date, subscription_id, modified_on, product_id) 
(
    SELECT s.idp_account_id, '', 1 AS quantity,
    (CASE 
        WHEN s.activation_status = 1 THEN 'active' 
        WHEN s.activation_status = 2 THEN 'suspended' 
        WHEN s.activation_status = 3 THEN 'deleted' 
        ELSE ''
    END) AS 'status', CAST(FROM_UNIXTIME( s.creation_date / 1000) AS DATETIME ) AS created_on,
    CAST(FROM_UNIXTIME( s.creation_date / 1000) AS DATETIME ) AS subscription_start_date, 
    s.expiry_date, s.sage_company_id, s.updated_date, s.portal_product_id FROM cfx_sage_subscriptions s 
UNION   
SELECT os.idp_account_id, c.id, os.quantity, os.`status`, cast(os.creationDate as DATETIME) AS created_on, 
    cast(os.effectiveStartDate as DATETIME) AS subscription_start_date, cast(os.commitmentEndDate as DATETIME) AS commitmentEndDate,
    os.subscriptionId, cast(os.creationDate as DATETIME) AS modified_on, TRIM(LEADING '0' FROM SUBSTR(os.cloudselect_product_id,4))
        FROM cfx_office365_customer_order_subscriptions  os
        JOIN cfx_office365_customer c ON os.tenantId=c.companyProfile_tenantId

)

Ниже приведена ошибка, создаваемая первым скриптом

Ошибка SQL (1064): у вас естьошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'UNION

1 Ответ

0 голосов
/ 01 марта 2019

старайтесь избегать псевдонимов в результате выбора

INSERT INTO cfx_subscriptions ( cfx_account_id, isv_company_id, license_qty, `status`, created_on, 
subscription_start_date, subscription_end_date, subscription_id, modified_on, product_id) 
    SELECT s.idp_account_id, '', 1 ,
    (CASE 
        WHEN s.activation_status = 1 THEN 'active' 
        WHEN s.activation_status = 2 THEN 'suspended' 
        WHEN s.activation_status = 3 THEN 'deleted' 
        ELSE ''
    END) , CAST(FROM_UNIXTIME( s.creation_date / 1000) AS DATETIME ) ,
    CAST(FROM_UNIXTIME( s.creation_date / 1000) AS DATETIME ) , 
    s.expiry_date, s.sage_company_id, s.updated_date, s.portal_product_id 
    FROM cfx_sage_subscriptions s 
UNION   
SELECT os.idp_account_id, c.id, os.quantity, os.`status`, cast(os.creationDate as DATETIME) , 
    cast(os.effectiveStartDate as DATETIME) , cast(os.commitmentEndDate as DATETIME) ,
    os.subscriptionId, cast(os.creationDate as DATETIME) , TRIM(LEADING '0' FROM SUBSTR(os.cloudselect_product_id,4))
        FROM cfx_office365_customer_order_subscriptions  os
        JOIN cfx_office365_customer c ON os.tenantId=c.companyProfile_tenantId
...