2011-09-14 30 views
6

bất cứ ai có thể giúp tôi tìm ra lý do tại sao tôi nhận được một lỗi trên cms.CRIME_ID:Weird Oracle SQL "không hợp lệ Identifier" lỗi

invalid identifier

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; 

tôi biết một sự thật tuyệt đối rằng cột tồn tại và tôi có thể tham khảo mỗi khác trong bảng đó ngoại trừ điều đó.

Điều duy nhất khác biệt về cột đó là nó là khóa chính cho bảng đó.

EDIT: Đây là lỗi đầy đủ và tập lệnh tạo bảng.

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: Ngoài ra, tôi nên có lẽ kể rằng khi không sử dụng tham gia và chỉ cần chọn báo cáo thường xuyên Tôi có thể truy cập vào cột tốt, như trong ví dụ mã sau:

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; 
+0

Hãy gửi các chi tiết của các bảng tham gia –

+1

Liệu người dùng của bạn có sự cho phép trên bàn tội phạm? –

+0

Định nghĩa cho bảng tội phạm_charges là gì? – Ollie

Trả lời

0

Bạn đã thử làm như sau?

Join On (Left Id) = (Right Id) 

Thay vì từ khóa Using

+0

Có, thật không may là điều đó không giúp được gì. – JohnQPublic

+0

Tham gia Sử dụng() vs Tham gia Bật() =() là giống nhau. – Thinhbk

0

cố gắng để thực hiện một bí danh cho tham gia báo cáo khoản:

select alias.criminal_id, alias.first, alias.last, alias.CRIME_ID, alias.crime_code, alias.fine_amount 
from criminals c join crimes cms on c.criminal_id = cms.criminal_id 
join crime_charges cc using (crime_id) as alias 
order by alias.first, alias.last; 
1

bạn không thể sử dụng vòng loại với cột được tham chiếu bởi "sử dụng" clause.you có thể sử dụng bên trong tham gia thay vì đó hãy thử sử dụng truy vấn này:

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 on cc.crime_id=cms.crime_id 
order by c.first, c.last; 
3

Vấn đề ở đây là khi truy vấn của bạn có mệnh đề USING, bạn không thể thêm vòng loại vào (các) cột được sử dụng trong mệnh đề này. Vì truy vấn của bạn có USING (crime_id), bạn không thể viết cms.CRIME_ID cũng không phải cc.crime_id. Thay vào đó, bạn phải xóa vòng loại, nghĩa là chỉ cần sử dụng crime_id.

Lạ lùng thay, khi tôi cố gắng này trên Oracle 11g XE beta, tôi nhận được một lỗi khác nhau:

 
SQL> select * from test1; 

     A   B 
---------- ---------- 
     1   2 

SQL> select * from test2; 

     A   C 
---------- ---------- 
     1   3 

SQL> select t1.a, t1.b, t2.c from test1 t1 inner join test2 t2 using (a); 
select t1.a, t1.b, t2.c from test1 t1 inner join test2 t2 using (a) 
     * 
ERROR at line 1: 
ORA-25154: column part of USING clause cannot have qualifier 


SQL> select a, t1.b, t2.c from test1 t1 inner join test2 t2 using (a); 

     A   B   C 
---------- ---------- ---------- 
     1   2   3 
Các vấn đề liên quan