sql语句错误:"列..不存在"

Ale*_*sio 9 sql postgresql quoted-identifier

我试着从postgres控制台这个命令:

select sim.id as idsim, 
       num.id as idnum 
from main_sim sim 
  left join main_number num on (FK_Numbers_id=num.id);
Run Code Online (Sandbox Code Playgroud)

我得到了这样的答复:

ERROR:  column "fk_numbers_id" does not exist
LINE 1: ...m from main_sim sim left join main_number num on (FK_Numbers...

但如果我只是检查我的表:

dbMobile=# \d main_sim

 id              | integer               | not null default

 Iccid           | character varying(19) | not null

...

 FK_Device_id    | integer               | 

 FK_Numbers_id   | integer               | 

Indexes:
    "main_sim_pkey" PRIMARY KEY, btree (id)
    "main_sim_FK_Numbers_id_key" UNIQUE, btree ("FK_Numbers_id")
    "main_sim_Iccid_key" UNIQUE, btree ("Iccid")
    "main_sim_FK_Device_id" btree ("FK_Device_id")
Foreign-key constraints:
    "FK_Device_id_refs_id_480a73d1" FOREIGN KEY ("FK_Device_id") REFERENCES main_device(id) DEFERRABLE INITIALLY DEFERRED
    "FK_Numbers_id_refs_id_380cb036" FOREIGN KEY ("FK_Numbers_id") REFERENCES main_number(id) DEFERRABLE INITIALLY DEFERRED
Run Code Online (Sandbox Code Playgroud)

......因为我们可以看到该列存在.

可能是语法错误,但我无法看到...

任何帮助将不胜感激.阿莱西奥

a_h*_*ame 19

不,该列FK_Numbers_id不存在,只"FK_Numbers_id"存在一列

显然,您使用双引号创建了表,因此所有列名称现在都区分大小写,您必须始终使用双引号:

select sim.id as idsim, 
       num.id as idnum 
from main_sim sim 
   left join main_number num on ("FK_Numbers_id" = num.id);
Run Code Online (Sandbox Code Playgroud)

要概述手册中已经记录的内容:

fooFOO是相同的,所述列"foo""FOO"都没有.

  • +1 我很难相信这是真的,因为它看起来很疯狂,但这里有一个 [sorta 工作演示](http://sqlfiddle.com/#!1/a33a9/4)。我不得不为第二列设置别名,因为 sqlfiddle 可能没想到两次使用“相同”名称。 (3认同)
  • @ConradFix:这是SQL标准的定义方式(标准要求所有名称都折叠成大写的差别很小) (2认同)