2012-04-04 11 views
6

Im cercando da console Postgres questo comando:errore di dichiarazione di sql: "colonna .. non esiste"

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

e io ho questa risposta:

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

ma se ho semplicemente controllare il mio tavolo con:

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 

... come possiamo vedere la colonna esiste.

Probabilmente è errore di sintassi, ma sono in grado di vedere ciò che ...

alcun aiuto iscritta sarà reperibile apprezzato. Alessio

+0

Hai provato "sim.FK_Numbers_id' invece di solo" FK_Numbers_id'? –

+3

Prova a digitare FK_Numbers_id tra virgolette, come "FK_Numbers_id". Come consiglio: non usare mai caso metrico in sql. – wildplasser

risposta

14

No, la colonna FK_Numbers_id non esiste, solo una colonna "FK_Numbers_id" esiste

A quanto pare è stata creata la tabella utilizzando i doppi apici e per questo tutti i nomi delle colonne sono ora tra maiuscole e minuscole e bisogna usare le virgolette tutto il tempo:

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

Per ricapitolare ciò che è già documented in the manual:

la colonna foo e FOO sono identici, le colonne "foo" e "FOO" no.

+0

+1 Ho avuto difficoltà a credere che questo fosse vero perché sembra folle ma qui c'è una [demo di funzionamento simile] (http://sqlfiddle.com/#!1/a33a9/4). Ho dovuto fare l'alias della seconda colonna perché sqlfiddle probabilmente non si aspettava il "stesso" nome due volte. –

+2

@ConradFix: Ecco come viene definito lo standard SQL (con la piccola differenza che lo standard richiede che tutti i nomi siano piegati in maiuscolo) –

+0

@Branko: sì Ho provato anche sim.FK_Numbers_id con lo stesso risultato .. – Alessio

Problemi correlati