PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

DELETE FROM ... meldet Syntaxfehler bei oder in der Nähe von .

Deine Anfrage ergibt keinen Sinn.

DELETE FROM database_userprofile WHERE user.username = 'some';
                                       ^^^^

Wo war user komme aus? Es wird in der Abfrage nicht darauf verwiesen. Ist es eine Spalte von database_userprofile ? In diesem Fall können Sie user.username nicht schreiben (es sei denn, es handelt sich um einen zusammengesetzten Typ, in diesem Fall müssten Sie (user).username schreiben dem Parser das sagen; aber ich bezweifle, dass es sich um einen zusammengesetzten Typ handelt).

Die unmittelbare Ursache ist dieser user ist ein reserviertes Wort . Sie können diesen Namen nicht ohne Anführungszeichen verwenden:

DELETE FROM database_userprofile WHERE "user".username = 'some';

... aber diese Abfrage macht immer noch keinen Sinn, sie gibt nur einen anderen Fehler aus:

regress=> DELETE FROM database_userprofile WHERE "user".username = 'some';
ERROR:  missing FROM-clause entry for table "user"
LINE 1: DELETE FROM database_userprofile WHERE "user".username = 'so...

Meine wilde Vermutung ist, dass Sie versuchen, eine Löschung über eine Verknüpfung durchzuführen. Ich gehe davon aus, dass Sie Tabellen wie:

haben
CREATE TABLE "user" (
    id serial primary key,
    username text not null,
    -- blah blah
);

CREATE TABLE database_userprofile (
     user_id integer references "user"(id),
     -- blah blah
);

und Sie versuchen, mit einer Bedingung in der anderen Tabelle zu löschen.

Wenn ja, können Sie nicht schreiben Sie einfach user.username . Sie müssen Folgendes verwenden:

DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';

Sie werden feststellen, dass ich "Benutzer" doppelt in Anführungszeichen gesetzt habe. Das liegt daran, dass es sich um ein Schlüsselwort handelt, das nicht wirklich für Tabellennamen oder andere benutzerdefinierte Bezeichner verwendet werden sollte. Doppelte Anführungszeichen erzwingen die Interpretation als Bezeichner und nicht als Schlüsselwort.