programing

UNION [ALL]에서 SELECT INTO 조항을 사용할 수 있습니까?

iphone6s 2023. 4. 7. 21:01
반응형

UNION [ALL]에서 SELECT INTO 조항을 사용할 수 있습니까?

SQL Server에서는 [Customers]테이블에서 tmpFerdeen :- 에 100개의 레코드가 삽입됩니다.

SELECT top(100)*
INTO tmpFerdeen
FROM Customers

UNION ALL SELECT를 통해 SELECT INTO를 수행할 수 있습니까:-

SELECT top(100)* 
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas

INTO 절을 추가할 위치를 잘 모르겠습니다.

이는 SQL Server에서 작동합니다.

SELECT * INTO tmpFerdeen FROM (
  SELECT top 100 * 
  FROM Customers
  UNION All
  SELECT top 100 * 
  FROM CustomerEurope
  UNION All
  SELECT top 100 * 
  FROM CustomerAsia
  UNION All
  SELECT top 100 * 
  FROM CustomerAmericas
) as tmp

여기에는 파생 테이블이 전혀 필요하지 않습니다.

그냥 넣어주세요INTO첫 번째 이후SELECT

SELECT top(100)* 
INTO tmpFerdeen
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas
SELECT * INTO tmpFerdeen FROM 
(SELECT top(100)*  
FROM Customers 
UNION All 
SELECT top(100)*  
FROM CustomerEurope 
UNION All 
SELECT top(100)*  
FROM CustomerAsia 
UNION All 
SELECT top(100)*  
FROM CustomerAmericas) AS Blablabal

이 "Blablabal"은 필수입니다.

MS Access 쿼리의 경우 이는 다음과 같이 동작했습니다.

SELECT * INTO tmpFerdeen FROM( 
    SELECT top(100) *
    FROM Customers 
UNION All 
    SELECT top(100) *  
    FROM CustomerEurope 
UNION All 
    SELECT top(100) *  
    FROM CustomerAsia 
UNION All 
    SELECT top(100) *  
    FROM CustomerAmericas
) 

MS Access에서는 동작하지 않았습니다.

SELECT top(100) * 
  INTO tmpFerdeen
  FROM Customers
UNION All
  SELECT top(100) * 
  FROM CustomerEurope
UNION All
  SELECT top(100) * 
  FROM CustomerAsia
UNION All
  SELECT top(100) * 
  FROM CustomerAmericas

저는 이렇게 하고 싶어요.

SELECT top(100)* into #tmpFerdeen
FROM Customers

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerEurope

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerAsia

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerAmericas

솔루션과 관련된 당면 과제:

FROM( 
SELECT top(100) *
    FROM Customers 
UNION
    SELECT top(100) *  
    FROM CustomerEurope 
UNION 
    SELECT top(100) *  
    FROM CustomerAsia 
UNION
    SELECT top(100) *  
    FROM CustomerAmericas
)

이는 RAM에 상주하는 윈도우 데이터 세트가 생성된다는 것입니다.이 솔루션에서는 먼저 파티션을 작성한 후 파티션을 사용하여 임시 테이블에 써야 하기 때문에 심각한 성능 문제가 발생합니다.

보다 나은 솔루션은 다음과 같습니다.

SELECT top(100)* into #tmpFerdeen
FROM Customers

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerEurope

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerAsia

Insert into #tmpFerdeen
SELECT top(100)* 
FROM CustomerAmericas

임시 테이블에 삽입을 선택한 다음 행을 추가합니다.단, 데이터 내에 중복된 행이 있는 경우는 여기서 참조할 수 있습니다.

최적의 솔루션은 다음과 같습니다.

Insert into #tmpFerdeen
SELECT top(100)* 
FROM Customers
UNION
SELECT top(100)* 
FROM CustomerEurope
UNION
SELECT top(100)* 
FROM CustomerAsia
UNION
SELECT top(100)* 
FROM CustomerAmericas

이 방법은 별도의 행을 필요로 하는 모든 목적에 대해 작동해야 합니다.그러나 중복 행을 UNION과 UNION ALL로 바꾸려면

행운을 빌어요!

이거 먹어볼래?

SELECT * INTO tmpFerdeen (
SELECT top(100)* 
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas)

다음과 같은 방법을 사용해 보십시오.최종 객체 테이블 tmpFerdeen을 유니언 구조로 만듭니다.

그리고나서

INSERT INTO tmpFerdeen (
SELECT top(100)* 
FROM Customers
UNION All
SELECT top(100)* 
FROM CustomerEurope
UNION All
SELECT top(100)* 
FROM CustomerAsia
UNION All
SELECT top(100)* 
FROM CustomerAmericas
)

언급URL : https://stackoverflow.com/questions/591382/is-it-possible-to-use-the-select-into-clause-with-union-all

반응형