2012-04-04 116 views
6

我可是从Postgres的控制台尝试此命令:SQL语句错误:“列..不存在”

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

和我有这样的响应:

 
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 

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

可能是语法错误,但我看不到有什么...

任何帮助will'be赞赏。 阿莱西奥

+0

你尝试过'sim.FK_Numbers_id'而不是'FK_Numbers_id'吗? – 2012-04-04 16:42:38

+3

尝试在引号中键入FK_Numbers_id,如“FK_Numbers_id”。作为建议:从不在sql中使用mized大小写。 – wildplasser 2012-04-04 16:43:34

回答

14

没有,列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); 

要回顾一下已经是documented in the manual

fooFOO是相同的,列"foo""FOO"不是。

+0

+1我很难相信这是真的,因为它似乎疯了,但这里是一个[sorta working demo](http://sqlfiddle.com/#!1/a33a9/4)。我必须别名第二列,因为sqlfiddle可能不会期待两次“相同”名称。 – 2012-04-04 16:58:44

+2

@ConradFix:这是如何定义SQL标准(与标准要求所有名称被折叠为大写的小差异) – 2012-04-04 17:00:13

+0

@Branko:是我试过sim.FK_Numbers_id以及相同的结果。 – Alessio 2012-04-04 21:24:11