DELETE FROM ...在“。”或附近报告语法错误。

时间:2013-06-07 13:15:25

标签: 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 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=...

希望你能帮助我

3 个答案:

答案 0 :(得分:2)

您的查询没有任何意义。

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

user来自哪里?它未在查询中引用。它是database_userprofile的列吗?如果是这样,你就不能写user.username(除非它是一个复合类型,在这种情况下你必须写(user).username来告诉解析器;但我怀疑它是一个复合类型。)

直接原因是user is a reserved word。如果不引用它,则不能使用该名称:

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

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

答案 1 :(得分:0)

由于文档的原因,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部分中,您可以指定目标表或使用列表中的表。

答案 2 :(得分:-1)

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