web-dev-qa-db-ja.com

POSTGRESQLのINSERTステートメントでのWITH句の使用

別のテーブルから1つの列を取得し、その列データを他のデータと一緒に別のテーブルに挿入する必要があるという要件があります。

例:

Cust_id = '11 'の場合、custテーブルからcust_codeを取得し(cust_code =' ABCD 'を返すとしましょう)、そのcust_codeを他のデータとともに使用して、table_1に次のように挿入します。

WITH get_cust_code_for_cust_id AS (
    SELECT cust_code FROM cust WHERE cust_id=11
)

INSERT INTO public.table_1(
    cust_code, issue, status, created_on)
    VALUES (SELECT cust_code FROM get_cust_code_for_cust_id, 'New Issue', 'Open', current_timestamp)

ただし、get_cust_code_for_cust_idクエリを呼び出していないため、このクエリは機能しません。

私の好みは、WITH句を含むクエリですが、他の回答も歓迎されます。

6
Neeraj Wadhwa

insertステートメントのソースがselect do notの場合、VALUESキーワードを使用します。

WITH get_cust_code_for_cust_id AS (
    SELECT cust_code 
    FROM cust 
    WHERE cust_id=11
)
INSERT INTO public.table_1 (cust_code, issue, status, created_on)
SELECT cust_code, 'New Issue', 'Open', current_timestamp 
FROM get_cust_code_for_cust_id;

ただし、CTEは実際には必要ありません。

INSERT INTO public.table_1 (cust_code, issue, status, created_on)
SELECT cust_code, 'New Issue', 'Open', current_timestamp  
FROM cust 
WHERE cust_id=11