sql >> Databáze >  >> RDS >> PostgreSQL

DELETE FROM ... hlášení chyby syntaxe na nebo blízko .

Váš dotaz nedává smysl.

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

Kde je user pocházet z? V dotazu není odkazováno. Je to sloupec database_userprofile ? Pokud ano, nemůžete napsat user.username (pokud se nejedná o složený typ, v takovém případě byste museli napsat (user).username říci to analyzátoru; ale pochybuji, že jde o složený typ).

Bezprostřední příčinou je, že user je rezervované slovo . Toto jméno nemůžete použít, aniž byste jej uváděli:

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

... tento dotaz však stále nedává smysl, pouze zobrazí jinou chybu:

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

Můj divoký odhad je, že se pokoušíte o smazání přes spojení. Předpokládám, že máte tabulky jako:

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

a pokoušíte se o odstranění pomocí podmínky napříč druhou tabulkou.

Pokud ano, nemůžete stačí napsat user.username . Musíte použít:

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

Všimnete si, že jsem uvedl dvakrát uvozovky „uživatel“. Je to proto, že se jedná o klíčové slovo a nemělo by se ve skutečnosti používat pro názvy tabulek nebo jiné uživatelem definované identifikátory. Dvojité uvozování nutí, aby byl interpretován jako identifikátor, nikoli klíčové slovo.



  1. Vzdálený HasManyThrough

  2. Mysql Count(*) jako Total KDE Celkem?

  3. ORACLE Omezení povolit hodnotu Null, IF

  4. Po otevření souboru csv do wordpadu nechci u názvu pole dvojité uvozovky