[sql] 상수로 채워진 여러 행을 선택하는 방법은 무엇입니까?

테이블을 참조하지 않고 상수를 선택하는 것은 SQL 문에서 완벽하게 합법적입니다.

SELECT 1, 2, 3

후자가 리턴하는 결과 세트는 값을 포함하는 단일 행입니다. 상수 표현식을 사용하여 한 번에 여러 행을 선택할 수있는 방법이 있는지 궁금합니다.

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))

위와 같이 작동하고 3 행과 3 열로 결과 집합을 반환하려고합니다.



답변

SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9


답변

에서은 PostgreSQL, 당신은 할 수 있습니다 :

SELECT  *
FROM    (
        VALUES
        (1, 2),
        (3, 4)
        ) AS q (col1, col2)

다른 시스템에서는 다음을 사용하십시오 UNION ALL.

SELECT  1 AS col1, 2 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle
UNION ALL
SELECT  3 AS col1, 3 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle

이어 Oracle, SQL ServerPostgreSQL, 또한 행 (외부 변수 제공 가능한) 임의의 수의 레코드를 생성 할 수있다 :

SELECT  level
FROM    dual
CONNECT BY
        level <= :n

에서 Oracle,

WITH    q (l) AS
        (
        SELECT  1
        UNION ALL
        SELECT  l + 1
        FROM    q
        WHERE   l < @n
        )
SELECT  l
FROM    q
-- OPTION (MAXRECURSION 0)
-- uncomment line above if @n >= 100

에서 SQL Server,

SELECT  l
FROM    generate_series(1, $n) l

에서 PostgreSQL.


답변

VALUESPostgreSQL에서 다음과 같은 베어 명령이 작동합니다.

VALUES (1,2,3), (4,5,6), (7,8,9)


답변

오라클에서 connect by 절을 사용해보십시오.

select level,level+1,level+2 from dual connect by level <=3;

connect by 절에 대한 자세한 내용을 보려면 다음 링크를 따르십시오. oraclebin 사이트가 이제 악성이므로 URL을 제거했습니다.


답변

Microsoft SQL Server 또는 PostgreSQL의 경우이 구문을 사용해 볼 수 있습니다

SELECT constants FROM (VALUES ('foo@gmail.com'), ('bar@gmail.com'), ('baz@gmail.com')) AS MyTable(constants)

여기에서 SQL Fiddle을 볼 수도 있습니다. http://www.sqlfiddle.com/#!17/9eecb/34703/0


답변

신탁. 이 게시물 덕분에 PL / SQL-절의 “목록”변수 사용

예제 문장을 정리하여 수동으로 값을 쉽게 입력 할 수 있습니다 (테스터가 응용 프로그램을 테스트 할 때 재 사용됨).

WITH prods AS (
    SELECT column_value AS prods_code 
    FROM TABLE(
        sys.odcivarchar2list(
            'prod1', 
            'prod2'
        )
    )
)
SELECT * FROM prods


답변

SELECT * 
FROM DUAL 
CONNECT BY ROWNUM <= 9;