쿼리 결과를 새로운 테이블로 생성하려면...(2) 0 11 5,619

by OYS [SQL Query] [2024.11.28 14:06:48]


이전 글에 계속 문의를 하는것보다 새로 작성하는게 나을것 같아, 새로 작성하겠습니다. 

 

이전글에서 with 구문을 작성하고 select * into 구문을 작성했는데, 제가 잘못 알고 있었던 것 같습니다. 

<올바른 구문>

-- SELECT * INTO new_table 
-- FROM original_table;

즉 select * into 구문을 먼저 쓰고, original_table에 with 구문이 와야하는 걸로 생각됩니다. ('마농' 님이 답변주신게 아마 이 내용을 말씀하신듯 합니다.)

그래서 아래와 같이 구문을 변경했는데 안타깝게도 여전히 에러가 발생하고 있는 상황입니다. 

select * into temp8 
from (

with 
temp7 as
(

select ....

from ....

where ...

)

select *

from temp7

where ...

)

* 에러메세지 : 키워드 'with' 근처의 구문이 잘못되었습니다.

 

 

by 마농 [2024.11.28 14:27:04]
-- 1. WITH 구문 이용 -- 이전 질문글의 첫번째 답변
WITH temp7 AS
(
SELECT ...
  FROM ...
 WHERE ...
)
SELECT *
  INTO temp8
  FROM temp7
 WHERE ...
;

-- 2. 인라인뷰(From 절 서브쿼리) 이용 -- 이전 질문글의 마지막 답변
SELECT *
  INTO temp8
  FROM (SELECT ...
          FROM ...
         WHERE ...
        ) temp7
 WHERE ...
;

 


by 우주민 [2024.11.28 14:30:58]

해당 내용으로 구글링을 좀 해봤는데....

with 를 이용한 select into 구문에서 오류가 있다는 내용이 있네요

(https://stackoverflow.com/questions/74546400/using-a-with-clause-inside-select-into)

 

구성이 가능하다면 인라인뷰 형태로 구성하시는게 더 좋을 듯 합니다.


by OYS [2024.11.28 16:20:11]

언급해주신 1번으로 해서 성공했습니다. 답답하셨을텐데 답변주셔서 정말 감사드립니다.

* 제가 위에서 언급한 select * into 구문을 먼저 쓰고, original_table에 with 구문을 작성하는게 틀린방법이었군요..

많이 배워갑니다. 다시 한 번 감사드립니다. 


by 마농 [2024.11.28 14:37:49]

with 를 이용한 select into 구문 자체가 안되는게 아니라
with 를 from 절 안에서 사용해서 안되는 것으로 보이네요.
with 를 맨 위에 사용하면 문제 없습니다.


by 우주민 [2024.11.28 15:14:21]

해당 내용의 답변에 달린 글들을 보니 정상적 with 문 처리된 쿼리를 이용해서도 에러난다는 코멘트가 있어서요.

2년 전 이야기이기도 하니... 버전의 문제였을 수도 있겠네요. 


by 마농 [2024.11.28 15:58:41]

저는 테스트 해보니 정상 수행됩니다. (MSSQL 2017)


by 쏭지 [2024.11.28 17:00:32]
--정상적 with 문 처리된 쿼리를 이용해서도 에러난다는 코멘트가 있어서요
-- -> 제가 알기론 MSSQL 에서 WITH문 작성할 때 WITH 문 앞에 세미콜론을 붙여야하는 걸로 알고 있습니다

;WITH TEMP AS
(
//쿼리
)
SELECT *
FROM TEMP

 


by 우주민 [2024.11.29 08:37:36]

해당 링크의 코멘트를 확인하면 with 문 앞에 세미콜론을 쓴건 그 전에 다른 쿼리가 있는거 같아서 그 쿼리의 영향을 받지 않으려고 세미콜론을 사용한 것으로 보여집니다.

쿼리 시작이 세미콜론인 것이 아니고, 기존 쿼리의 마지막을 표기하기위한 세미콜론 인것이죠.


by 쏭지 [2024.11.28 16:44:40]

제가 답변한 내용은 확인을 안하셨나보네요ㅠㅠ


by OYS [2024.11.28 17:13:39]

제가 코멘트를 드린다는걸 깜빡했습니다. 죄송합니다. 

언급해주신 방법으로 시도했는데 잘 안돼서, 계속 질문을 드리고 있는 상황이었습니다. 

소중한 답변 정말 감사드립니다. 


by 마농 [2024.11.28 17:30:19]

세미콜론(;)은 WITH 문 앞에 붙이는게 아니라
SQL 문장의 가장 마지막에 붙이는 것이죠.
SQL 문장이 여기서 끝난다는 것을 표시.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입