Komisch, Oracle SQL "Ungültiger Bezeichner" error
Kann jemand mir helfen herauszufinden, warum bekomme ich eine Fehlermeldung auf cms.CRIME_ID
:
ungültige Bezeichner
select c.criminal_id, c.first, c.last, cms.CRIME_ID, cc.crime_code, cc.fine_amount
from criminals c join crimes cms on c.criminal_id = cms.criminal_id
join crime_charges cc using (crime_id)
order by c.first, c.last;
Weiß ich für eine absolute Tatsache, dass die Spalte existiert und ich kann auf jede andere Spalte in dieser Tabelle abgesehen.
Nur, was andere über diese Spalte, es ist der Primärschlüssel für diese Tabelle.
EDIT: Hier ist der Fehler und das Skript zur Erstellung der Tabelle.
Error starting at line 1 in command:
select c.criminal_id, c.first, c.last, cms.CRIME_ID, cc.crime_code, cc.fine_amount
from criminals c join crimes cms on c.criminal_id = cms.criminal_id
join crime_charges cc using (crime_id)
order by c.first, c.last
Error at Command Line:1 Column:39
Error report:
SQL Error: ORA-00904: "CMS"."CRIME_ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
CREATE TABLE crimes
(crime_id NUMBER(9),
criminal_id NUMBER(6),
classification CHAR(1),
date_charged DATE,
status CHAR(2),
hearing_date DATE,
appeal_cut_date DATE);
ALTER TABLE crimes
MODIFY (classification DEFAULT 'U');
ALTER TABLE crimes
ADD (date_recorded DATE DEFAULT SYSDATE);
ALTER TABLE crimes
MODIFY (criminal_id NOT NULL);
ALTER TABLE crimes
ADD CONSTRAINT crimes_id_pk PRIMARY KEY (crime_id);
ALTER TABLE crimes
ADD CONSTRAINT crimes_class_ck CHECK (classification IN('F','M','O','U'));
ALTER TABLE crimes
ADD CONSTRAINT crimes_status_ck CHECK (status IN('CL','CA','IA'));
ALTER TABLE crimes
ADD CONSTRAINT crimes_criminalid_fk FOREIGN KEY (criminal_id)
REFERENCES criminals(criminal_id);
ALTER TABLE crimes
MODIFY (criminal_id NOT NULL);
EDIT2: Auch, vielleicht sollte ich erwähnen, dass, wenn Sie nicht mit joins und nur reguläre select-Anweisungen kann ich den Zugriff auf die Spalte einfach in Ordnung, wie im folgenden code-Beispiel:
select c.criminal_id, c.first, c.last, cms.crime_id, cc.crime_code, cc.fine_amount
from criminals c, crime_charges cc, crimes cms
where c.criminal_id = cms.criminal_id
and cms.crime_id = cc.crime_id
order by c.first, c.last;
Bitte posten Sie die details der beteiligten Tabellen
Hat Ihr Benutzer die Berechtigung haben, auf die Verbrechen, die Tabelle?
Was ist die definition für die crime_charges Tabelle?
F,M,O,U = Verbrechen, Vergehen, Verordnung (?), ???
Haben Sie versucht, mit dem voll qualifizierten Namen (zB:
Hat Ihr Benutzer die Berechtigung haben, auf die Verbrechen, die Tabelle?
Was ist die definition für die crime_charges Tabelle?
F,M,O,U = Verbrechen, Vergehen, Verordnung (?), ???
Haben Sie versucht, mit dem voll qualifizierten Namen (zB:
crimes.crime_id
statt cms.crime_id
)?InformationsquelleAutor JohnQPublic | 2011-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem hier ist, dass, wenn Ihre Abfrage eine
USING
Klausel, Sie können nicht hinzufügen Qualifikationsturniere für die Spalte(N) verwendet, in diese Klausel. Weil deine Abfrage hatUSING (crime_id),
Sie nicht schreiben könnencms.CRIME_ID
nochcc.crime_id
. Stattdessen müssen Sie die Kennzeichner, D. H., verwenden Sie einfachcrime_id
.Seltsam genug, wenn ich versuche diese auf Oracle 11g XE beta, ich bekomme eine andere Fehlermeldung:
InformationsquelleAutor Luke Woodward
können Sie nicht verwenden, qualifier mit Spalte verweist, die "mit" - Klausel.Sie könnte verwenden Sie inner join statt,
versuchen Sie es mit dieser Abfrage:
InformationsquelleAutor pravs
versuchen, einen alias für join-Anweisungen-Klausel:
InformationsquelleAutor Thinhbk
Hast du Folgendes versuchen ?
Statt keyword -
Using
Join Using () vs Join () = () ist das gleiche.
InformationsquelleAutor Khilitchandra Prajapati