web-dev-qa-db-fra.com

Utilisation de la clause WITH avec l'instruction INSERT dans POSTGRESQL

J'ai une exigence dans laquelle j'ai besoin d'obtenir une colonne d'une autre table et d'insérer ces données de colonne avec d'autres données dans une autre table.

Exemple:

Si le cust_id = '11 'alors j'ai besoin d'obtenir le cust_code de la table cust (disons qu'il retourne cust_code =' ABCD ') et ensuite utiliser ce cust_code avec d'autres données à insérer dans la table_1 comme ceci:

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)

Mais cette requête ne fonctionne pas car nous n'avons pas appelé le get_cust_code_for_cust_id requete.

Ma préférence est une requête avec la clause WITH mais toute autre réponse sera également appréciée.

6
Neeraj Wadhwa

Si la source d'une instruction insert est un select do not utilisez le mot clé 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;

Cependant, vous n'avez pas vraiment besoin du 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
9