하드 코딩 된 값 목록에 대한 CTE를 작성하는 방법이 있습니까? 예를 들어, 알려진 ID (예 : 101102105200 ...)의 목록이 있는데 ID라는 하나의 열이있는 CTE를 만들 수 있지만 모든 ID 값은 검색어에 하드 코딩되어 있습니까? BTW, Oracle에서이 쿼리를 실행해야합니다. 감사!정의 된 값 목록을 CTE에 작성하십시오.
7
A
답변
10
당신은
WITH cte AS (
SELECT 101 id FROM dual UNION ALL
SELECT 102 FROM dual UNION ALL
SELECT 105 FROM dual UNION ALL
SELECT 200 FROM dual UNION ALL
...
)
은 당신이 정말로 수행하려는 작업에 따라 같은 일을 할 수있는,하지만 당신은 컬렉션을 선언하고 쉼표로 구분 된 구문 분석 기능을 사용하거나 사용하지 않고 (즉를 사용할 수 있습니다 문자열)
CREATE TYPE num_tbl
AS TABLE OF NUMBER;
WITH cte AS (
SELECT column_value
FROM TABLE(num_tbl(101, 102, 105, 200))
)
7
편집 : 이전에 권고 된 솔루션은 MSSQL에서만 작동합니다. 따라서 Oracle 솔루션을 추가하고 있습니다. 나는 아래에 원래의 대답을 유지하고있다.
임시 테이블을 사용하여 한 가지 더 많은 솔루션을 생각했습니다 (Justin Cave에서 제공 한 솔루션이 여전히 조금 나은 것으로 보이지만). 여기
는 오라클 데이터베이스에 대한 올바른 해결책이 될해야
CREATE GLOBAL TEMPORARY TABLE temp_ids
(id INT)
ON COMMIT PRESERVE ROWS;
INSERT INTO ids (id) VALUES (101);
INSERT INTO ids (id) VALUES (102);
INSERT INTO ids (id) VALUES (103);
이처럼 보일 수 있습니다 방법이다. 내가 여기에 비슷한 문제가 건너와 한
아래
원래 대답은 내 솔루션 (댓글에서 언급 한 바와 같이이 오라클 DB에 불구하고 단지 MSSQL 작동하지 않습니다)입니다
WITH cte AS (
SELECT * FROM (
VALUES
(1, 2, 3, ...),
(2, 3, 4, ...)
) AS a (col1, col2, col3, ...)
)
INSERT INTO ...
희망 이게 도움이 :)
단지 최근 버전을 추가하면 하위 쿼리 인수 절에 대한 열 별칭을 별도로 정의 할 수 있으므로 잠재적으로 쿼리 절을 약간 깔끔하게 유지할 수 있습니다. WITH cte (id) as (SELECT 101 from dual ... http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702 –