定義された値のリストをCTEに作成する質問する

定義された値のリストをCTEに作成する質問する

ハードコードされた値のリストに対して CTE を構築する方法はありますか? たとえば、既知の ID (101、102、105、200...) のリストがある場合、クエリですべての ID 値がハードコードされているのに、ID という 1 つの列を持つ CTE を作成するにはどうすればよいでしょうか? ちなみに、このクエリは Oracle で実行する必要があります。よろしくお願いします!

ベストアンサー1

編集: 以前にアドバイスされたソリューションは MSSQL でのみ機能します。そのため、Oracle ソリューションを追加します。元の回答は以下に残しておきます。

もう 1 つの解決策 (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);

これは Oracle データベースにとって有効なソリューションとなるはずです。

元の回答は以下


同様の問題に遭遇したことがあります。ここに私の解決策を示します (コメントに記載されているように、これは Oracle DB では機能せず、MSSQL のみで機能します)

WITH cte AS (
    SELECT * FROM (
        VALUES
            (1, 2, 3, ...),
            (2, 3, 4, ...)
        ) AS a (col1, col2, col3, ...)
    )
INSERT INTO ...

お役に立てれば :)

おすすめ記事