sql statement error: "column .. does not exist"

Go To StackoverFlow.com


Im trying from postgres console this command:

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

and I've got this response:

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

but if I simply check my table with:

dbMobile=# \d main_sim

 id              | integer               | not null default

 Iccid           | character varying(19) | not null


 FK_Device_id    | integer               | 

 FK_Numbers_id   | integer               | 

    "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

...as we can see the column exist.

probably it's syntax error, but I'm unable to see what...

any help will'be appreciated. Alessio

2012-04-04 16:37
by Alessio
Did you try sim.FK_Numbers_id instead of just FK_Numbers_id - Branko Dimitrijevic 2012-04-04 16:42
Try typing FKNumbersid in quotes, like "FKNumbersid". As an advice: never use mized case in sql - wildplasser 2012-04-04 16:43


No, the column FK_Numbers_id does not exist, only a column "FK_Numbers_id" exists

Apparently you created the table using double quotes and therefor all column names are now case-sensitive and you have to use double quotes all the time:

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

To recap what is already documented in the manual:

The column foo and FOO are identical, the columns "foo" and "FOO" are not.

2012-04-04 16:43
by a_horse_with_no_name
+1 I had trouble believing this was true because it seems insane but here's a sorta working demo. I had to alias the second column because sqlfiddle probably wasn't expecting the "same" name twice - Conrad Frix 2012-04-04 16:58
@ConradFix: This is how the SQL standard is defined (with the small difference that the standard requires all names to be folded to uppercase - a_horse_with_no_name 2012-04-04 17:00
@Branko: yes I tried sim.FKNumbersid as well with same result. - Alessio 2012-04-04 21:24
@AlessioTomelleri: you need to enclose the column name with double quotes as I showed in my answer. Those quotes make the difference - a_horse_with_no_name 2012-04-04 21:25
@wildplasser : yes, I think I'll do mine that advic - Alessio 2012-04-04 21:37
@ahorsewithnoname : it seems, you have got the problem... with quotes it's fine. To be honestly I missed told you about django. Django did the sql "create" statement directly and seems it created using quote... thanks for hel - Alessio 2012-04-04 21:38
@wildplasser I thank you as well, your advice was in the right way, as showed up .. - Alessio 2012-04-04 21:57