错误:“。”处或附近的语法错误第 4 行:在 like.takerId = frame.likeId 上;

Posted

技术标签:

【中文标题】错误:“。”处或附近的语法错误第 4 行:在 like.takerId = frame.likeId 上;【英文标题】:ERROR: syntax error at or near "." LINE 4: ON like.takerId = frame.likeId; 【发布时间】:2021-07-07 05:27:06 【问题描述】:

我有一个名为like 的表。但是每当我必须从中选择数据时,我就会收到这个错误,我发现public.like..但是当我尝试加入两个表时

SELECT *
FROM frame
INNER JOIN public.like
ON like.takerId = frame.likeId;

我收到这个错误

ERROR:  syntax error at or near "."
LINE 4: ON like.takerId = frame.likeId;

我也使用公共前缀,但它会抛出

ERROR:  column like.takerid does not exist
LINE 4: ON public.like.takerId = frame.likeId;
           ^
HINT:  Perhaps you meant to reference the column "like.takerId".

即使它说的是column like.takerid does not exist,那为什么它给我HINT: Perhaps you meant to reference the column "like.takerId".我不知道,我认为这是like表名的问题,like是一个sql语法,它假设like和一个 sql 语法并抛出错误。我应该更改我的表名吗?或者有什么方法可以让 sql 区分大小写,或者我如何告诉 sql 忽略 likepublic.like 不适用于加入表。

【问题讨论】:

您使用保留字作为名称 我会推荐likes。复数不太可能干扰保留字和关键字。而且,表包含多个实体,所以复数是合适的。 【参考方案1】:

由于like 是保留关键字,因此每次出现都需要使用double quotes(除非它以您发现的架构名称为前缀)

SELECT *
FROM frame
  JOIN public.like ON "like".takerId = frame.likeId;

或者

SELECT *
FROM frame
  JOIN "like" ON "like".takerId = frame.likeId;

或者使用别名

SELECT *
FROM frame f
  JOIN "like" l ON l.takerId = f.likeId;

但从长远来看,您应该为不需要引用的表找到一个不同的名称。

【讨论】:

【参考方案2】:

您绝对应该为您的桌子选择另一个名称。 LIKE 是一个保留命令,尽管使用 " 是可能的,但使用它被认为是一种不好的做法,例如

CREATE TABLE public."like" (id int);
INSERT INTO public."like" VALUES (42);
SELECT * FROM "public.like"

编辑:正如@a​​_horse_with_no_name 所指出的,在临时表中指定模式将不起作用(检查db<>fiddle),因此只有表名应该在双引号之间,如在上面的sn-p。对于临时表,只需省略模式:

CREATE TEMPORARY TABLE "like" (id int);
INSERT INTO "like" VALUES (42);
SELECT * FROM "like"

演示:db<>fiddle

【讨论】:

@a_horse_with_no_name 一开始我也是这么想的,结果报错了:dbfiddle.uk/… @a_horse_with_no_name 啊,现在我看到了问题......它不适用于`TEMPORARY表:-P dbfiddle.uk/… 您不能为临时表指定架构。 @a_horse_with_no_name 感谢您的指出!令人惊讶的是,简单的事情会变得多么棘手。我刚刚纠正了它。 +1

以上是关于错误:“。”处或附近的语法错误第 4 行:在 like.takerId = frame.likeId 上;的主要内容,如果未能解决你的问题,请参考以下文章

错误:“修改”处或附近的语法错误 - 在 postgres

PostgreSQL 与 TypeORM 错误“在 \"Sep\" 处或附近出现语法错误”

“.”处或附近的QueryDSL语法错误在多对多的关系

java - PSQLException:错误:“$ 1”处或附近的语法错误[重复]

Npgsql Exception-“\”处或附近的语法错误

错误:“用户”处或附近的语法错误