Bizarre Oracle SQL “Identifiant Invalide” erreur
Quelqu'un peut-il m'aider à comprendre pourquoi j'obtiens une erreur sur cms.CRIME_ID
:
identifiant invalide
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;
Je sais pour un fait absolu que la colonne existe, et je peut faire référence à tous les autres de la colonne dans la table sauf que.
La seule chose de différent à propos de cette colonne, c'est que c'est la clé primaire de cette table.
EDIT: Voici l'erreur dans leur intégralité et de la création de la table de script.
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: et Aussi, je devrais probablement mentionner que lorsque vous n'utilisez pas de jointures et de simples instructions select, je peux accéder à la colonne parfaitement, comme dans l'exemple de code suivant:
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;
- Merci de poster les détails de la tables impliquées
- Est-ce que votre utilisateur soit autorisé sur les crimes de la table?
- Quelle est la définition de la crime_charges table?
- F,M,O,U = Crime, Délit, D'Une Ordonnance (?), ???
- Avez-vous essayé d'utiliser le nom complet (par exemple:
crimes.crime_id
au lieu decms.crime_id
)? - Pouvez vous s'il vous plaît faire un
DESC crimes
et de nous montrer la sortie?
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que lorsque votre requête a un
USING
clause, vous ne pouvez pas ajouter des qualificatifs à la colonne(s) utilisée dans la présente clause. Parce que votre requête aUSING (crime_id),
vous ne pouvez pas écrirecms.CRIME_ID
nicc.crime_id
. Au lieu de cela, vous devez supprimer le qualificatif, c'est à dire, il suffit d'utilisercrime_id
.Curieusement, quand je l'ai essayer sur Oracle 11g XE bêta, j'obtiens une erreur différents:
vous ne pouvez pas utiliser qualifier avec la colonne référencée par "l'aide" de la clause.vous pouvez utiliser une jointure interne, au lieu de
essayez d'utiliser cette requête:
essayer de faire un alias pour rejoindre les déclarations de la clause:
Avez-vous essayez les solutions suivantes ?
Au lieu de mot-clé
Using