2016-10-30 32 views
1

Ich habe folgendes Szenario. Ich habe eine Tabelle mit einem IsDeleted-Flag, das ich für das Löschen von Datensätzen eingerichtet habe. Ich mache einen UPSERT, bei dem ich einige Datensätze hinzufüge, modifiziere und als gelöscht deklariere. Ich möchte Datensätze ausschließen, die in der RETURNING-Anweisung als gelöscht gekennzeichnet wurden. Ich habe versucht, nur WHERE tbltest_IsDeleted = 0 an das Ende der folgenden SQL anhängen, aber es gibt mir den Fehler: Fehler: Syntaxfehler bei oder in der Nähe von "WHERE"Wie kann ich RETURNING * filtern?

Wie kann ich die Ergebnisse der RETURNING * in der folgenden Anweisung filtern?

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 *; 

Antwort

1

es hat geklappt, hier ist, wie ich in der Lage war, es zu tun:

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 

Hoffentlich spart jemand einige Zeit ;-)

Verwandte Themen