我正在尝试从我的数据库中删除一个数据,但是,当我编写命令时,我一直都会遇到一些语法错误,你能告诉我错误在哪里吗?
这是我试过的命令:
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=...
希望你能帮助我
答案 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中。