Database 从…中删除。。。“处或附近报告语法错误。”&引用;

Database 从…中删除。。。“处或附近报告语法错误。”&引用;,database,postgresql,row,delete-row,sql-delete,Database,Postgresql,Row,Delete Row,Sql Delete,我试图从我的数据库中删除一个数据,但是,当我编写命令时,我总是发现有一些语法错误,你能告诉我错误在哪里吗 以下是我尝试过的命令: DELETE FROM database_userprofile WHERE user.username = 'some'; ERROR: syntax error at or near "." LINE 1: DELETE FROM database_userprofile WHERE user.username = 'some'... DELETE FROM

我试图从我的数据库中删除一个数据,但是,当我编写命令时,我总是发现有一些语法错误,你能告诉我错误在哪里吗

以下是我尝试过的命令:

DELETE FROM database_userprofile WHERE user.username = 'some';
ERROR:  syntax error at or near "."
LINE 1: DELETE FROM database_userprofile WHERE user.username = 'some'...

DELETE FROM database_userprofile USING database_user WHERE user.username="some";
ERROR:  syntax error at or near "."
LINE 1: ... database_userprofile USING database_user WHERE user.username=...

希望您能帮助我

由于文档原因,PostgreSQL 9.1中删除的语法是:

[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE FROM [ ONLY ] table [ * ] [ [ AS ] alias ]
    [ USING using_list ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
因此,您需要在DELETE命令后指定“table_name”,而不是“database_name”。
只有登录到数据库后,才能删除数据

你得到了
错误:“.”处或附近出现语法错误

因为在WHERE部分可以指定目标表或usinglist中的表。

您的查询没有任何意义

DELETE FROM database_userprofile WHERE user.username = 'some';
                                       ^^^^
user
来自哪里?查询中未引用它。它是
数据库_userprofile
的一列吗?如果是这样,您就不能编写
user.username
(除非它是复合类型,在这种情况下,您必须编写
(user.username>)来告诉解析器这一点;但我怀疑它是复合类型)

直接原因是。如果不引用该名称,则不能使用该名称:

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

你会注意到,我双引号“user”。这是因为它是一个关键字,不应该真正用于表名或其他用户定义的标识符。双引号强制将其作为标识符而不是关键字进行解释。

将查询从Eclipse复制粘贴到pgadmin时,也可能会出现此错误。不知何故,可能会插入一个奇怪的符号。为避免此错误,请先将其粘贴到一个简单的文本编辑器(如记事本)中,然后从该编辑器中剪切并粘贴到pgadmin中。

始终包括tour PostgreSQL版本和任何相关的表定义。解释你想要达到的目标,这样我们就不用猜测了。这次还是向上投票,因为您确实包含了完整、准确的命令文本和错误(谢谢!)。实际上,直接原因是
user
是一个保留字。