IT

MySQL 유니언이 insert and select 문에서 작동하지 않습니다.

itgroup 2023. 7. 22. 09:57
반응형

MySQL 유니언이 insert and select 문에서 작동하지 않습니다.

여러 테이블에서 데이터를 가져와 하나의 테이블에 삽입하는 SQL 스크립트를 만들고 싶습니다.

아래 하위 쿼리는 정상적으로 작동합니다.

  1. INSERT 에서 하나씩 실행할 때
  2. 삽입 쿼리에서 사용하지 않을 때 두 선택 쿼리 모두 유니언과 함께 정상적으로 작동합니다.

하지만 유니온을 사용하여 단일 스크립트를 만들면 제공됩니다.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' 근처에서 사용할 올바른 구문을 확인하십시오.

선택한 결과에서 별칭을 피하려고 합니다.

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

언급URL : https://stackoverflow.com/questions/54944516/mysql-union-is-not-working-with-insert-and-select-statement

반응형