2012-04-04 15 views
6

Im von Postgres Konsole versucht, diesen Befehl ein:SQL-Anweisung Fehler: "Spalte .. existiert nicht"

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

und ich habe diese Antwort bekam:

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

aber wenn ich einfach überprüfen meine Tabelle mit:

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 

... wie wir die Spalte existieren sehen.

wahrscheinlich ist es Syntaxfehler, aber ich bin nicht in der Lage, was zu sehen ...

jede Hilfe will'be geschätzt. Alessio

+0

Haben Sie 'sim.FK_Numbers_id' anstatt nur' FK_Numbers_id' versucht? –

+3

Versuchen Sie, FK_Numbers_id in Anführungszeichen einzugeben, z. B. "FK_Numbers_id". Als Ratschlag: Benutze niemals mised case in sql. – wildplasser

Antwort

14

Nein, die Spalte FK_Numbers_id nicht vorhanden ist, nur eine Spalte "FK_Numbers_id" existiert

Anscheinend Sie die Tabelle doppelte Anführungszeichen und dafür alle Spaltennamen erstellt wurden, sind jetzt Groß- und Kleinschreibung haben Sie alle doppelte Anführungszeichen zu verwenden, die Zeit:

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

was zu rekapitulieren ist bereits documented in the manual:

die Säule foo und FOO sind identisch, die Spalten "foo" und "FOO" sind nicht identisch.

+0

+1 Ich hatte Schwierigkeiten zu glauben, dass dies wahr ist, weil es verrückt scheint, aber hier ist eine [sorta working demo] (http://sqlfiddle.com/#!1/a33a9/4). Ich musste die zweite Spalte aliasieren, weil sqlfiddle wahrscheinlich den "gleichen" Namen nicht zweimal erwartete. –

+2

@ConradFix: Dies ist, wie der SQL-Standard definiert ist (mit dem kleinen Unterschied, dass der Standard erfordert, dass alle Namen in Großbuchstaben gefaltet werden) –

+0

@Branko: ja Ich versuchte sim.FK_Numbers_id auch mit dem gleichen Ergebnis .. – Alessio

Verwandte Themen