Вашето запитване няма никакъв смисъл.
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
Къде user
идвам от? Не е посочено в заявката. Дали е колона от database_userprofile
? Ако е така, не можете да напишете user.username
(освен ако не е съставен тип, в който случай ще трябва да напишете (user).username
да каже на анализатора това; но се съмнявам, че е съставен тип).
Непосредствената причина е, че user
е запазена дума
. Не можете да използвате това име, без да го цитирате:
DELETE FROM database_userprofile WHERE "user".username = 'some';
... обаче тази заявка все още няма смисъл, просто ще даде различна грешка:
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...
Моето странно предположение е, че се опитвате да направите изтриване върху присъединяване. Предполагам, че имате таблици като:
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
);
и се опитвате да направите изтриване с условие в другата таблица.
Ако е така, не можете просто напишете user.username
. Трябва да използвате:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';
Ще забележите, че съм поставил в двойни кавички „потребител“. Това е така, защото това е ключова дума и всъщност не трябва да се използва за имена на таблици или други дефинирани от потребителя идентификатори. Двойното му поставяне в кавички го принуждава да бъде интерпретирано като идентификатор, а не като ключова дума.