ハードコードされた値のリストに対して 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 ...
お役に立てれば :)