sql >> Database teknologi >  >> RDS >> PostgreSQL

DELETE FROM ... rapporterer syntaksfejl ved eller tæt på .

Din forespørgsel giver ingen mening.

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

Hvor blev user kommer fra? Det er ikke refereret i forespørgslen. Er det en kolonne af database_userprofile ? Hvis ja, kan du ikke skrive user.username (medmindre det er en sammensat type, i hvilket tilfælde du skal skrive (user).username at fortælle parseren at; men jeg tvivler på, at det er en sammensat type).

Den umiddelbare årsag er, at user er et reserveret ord . Du kan ikke bruge det navn uden at citere det:

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

... dog giver denne forespørgsel stadig ingen mening, den vil bare give en anden fejl:

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...

Mit vilde gæt er, at du forsøger at lave en sletning over en joinforbindelse. Jeg går ud fra, at du har tabeller som:

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

og du forsøger at slette med en betingelse på tværs af den anden tabel.

Hvis ja, kan du ikke bare skriv user.username . Du skal bruge:

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

Du vil bemærke, at jeg har dobbeltciteret "bruger". Det skyldes, at det er et nøgleord og egentlig ikke bør bruges til tabelnavne eller andre brugerdefinerede identifikatorer. Dobbeltcitering tvinger det til at blive fortolket som en identifikator og ikke et nøgleord.



  1. Er der et .NET svarende til SQL Servers newsequentialid()

  2. Kan ikke caste COM-objekt af typen 'System.__ComObject' til grænsefladetypen 'Microsoft.VisualStudio.OLE.Interop.IServiceProvider'

  3. Sådan skjuler du resultatsæt-dekoration i Psql-output

  4. SUM i LEFT JOIN-forespørgsel