2016-10-30 6 views
1

J'ai le scénario suivant. J'ai une table qui a un indicateur IsDeleted que je définis pour faire une «suppression douce» des enregistrements. Je fais un UPSERT où j'ajoute, modifie et marque comme supprimé certains enregistrements. Je souhaite exclure les enregistrements qui ont été marqués comme supprimés de l'instruction RETURNING. J'ai essayé d'ajouter simplement WHERE tbltest_IsDeleted = 0 à la fin du SQL suivant, mais il me donne l'erreur: ERREUR: erreur de syntaxe à ou près de "WHERE"Comment puis-je filtrer RETURNING *?

Comment puis-je filtrer les résultats du RETURNING * dans l'énoncé suivant?

INSERT INTO tbltest (
    tbltest_ID, 
    tbltest_Name, 
    tbltest_Description, 
    tbltest_IsDeleted) 
VALUES 
(DEFAULT, 'new record','new record description', 0), 
(4, 'modified record name','modified record description', 0), 
(5, 'existing record name','existing record description', 1) 
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name, 
    tbltest_Description, 
    tbltest_IsDeleted) = (
    excluded.tbltest_Name, 
    excluded.tbltest_Description, 
    excluded.tbltest_IsDeleted) RETURNING *; 

Répondre

1

avaient calculé ce, voici comment j'ai pu le faire:

WITH rows AS (
    INSERT INTO tbltest (
      tbltest_ID, 
      tbltest_Name, 
      tbltest_Description, 
      tbltest_IsDeleted) 
    VALUES 
    (DEFAULT, 'new record','new record description', 0), 
    (4, 'modified record name','modified record description', 0), 
    (5, 'existing record name','existing record description', 1) 
    ON CONFLICT (tbltest_ID) DO UPDATE SET (
      tbltest_Name, 
      tbltest_Description, 
      tbltest_IsDeleted) = (
      excluded.tbltest_Name, 
      excluded.tbltest_Description, 
      excluded.tbltest_IsDeleted) RETURNING * 
) 
SELECT * FROM rows WHERE rows.tbltest_IsDeleted = 0 

quelqu'un Espérons que cela permet d'économiser un peu de temps ;-)