2013-11-20 20 views
6

Tôi nhận được lỗi này: # 1054 - Cột không xác định 'examresults.userid' trong 'on clause'# 1054 - Cột không xác định trong 'on clause'

Tôi đã xem các bài đăng khác nhưng tôi có thể ' t dường như con số nó ra. Tôi không nghĩ rằng tôi đang đề cập đến bất cứ điều gì ra khỏi trật tự ...

SELECT examinationresults.id AS id, examinationresults.examid AS examid, 
examination.tag AS examtag, examination.title AS examtitle, examinationresults.revision AS revision, 
examination.medicalspecialtyid AS medicalspecialtyid, medicalspecialties.title AS medicalspecialtytitle, 
examination.institutionid AS institutionid, institutions.title AS institutiontitle, 
examinationresults.grade AS grade, examinationresults.points AS points, examinationresults.pointsof AS pointsof, 
examinationresults.datebegan AS datebegan, examinationresults.datefinished AS datefinished, 
examinationresults.totaltime AS totaltime, examinationresults.finished AS finished, examinationresults.graded AS graded, 
users.username AS username, users.firstname AS firstname, users.middlename AS middlename, users.lastname AS lastname 
FROM examinationresults, examination 
INNER JOIN medicalspecialties 
    ON examination.medicalspecialtyid=medicalspecialties.id 
INNER JOIN institutions 
    ON examination.institutionid=institutions.id 
INNER JOIN users 
    ON examinationresults.userid=users.id 
WHERE examination.examid=examinationresults.examid AND examination.revision=examinationresults.revision AND examinationresults.userid='1' 
ORDER BY examinationresults.datefinished ASC; 

Trả lời

6

Bạn có

FROM examinationresults, examination 
INNER JOIN medicalspecialties /*....*/ 

Không trộn lẫn ANSI 89 và ANSI 92 tham gia các phong cách.

Sử dụng cú pháp INNER JOIN cho examinationresultsexamination quá.

FROM examinationresults 
     INNER JOIN examination 
     ON examination.examid = examinationresults.examid 
      AND examination.revision = examinationresults.revision 
     INNER JOIN medicalspecialties 
     ON examination.medicalspecialtyid = medicalspecialties.id 
     INNER JOIN institutions 
     ON examination.institutionid = institutions.id 
     INNER JOIN users 
     ON examinationresults.userid = users.id 
WHERE examinationresults.userid = '1' 
+0

Hoàn hảo. Điều đó có ý nghĩa hơn nhiều ... Nó thực sự đang làm điều tương tự theo hai cách khác nhau bằng cách sử dụng FROM/WHERE để tham gia ... INNER JOIN (ANSI 92 Tôi giả sử?) Là tốt hơn và rõ ràng hơn nhiều. – Edward

+1

@Edward - Có tham gia bên trong là phiên bản ANSI 92. Nếu bạn kết hợp các loại tham gia, bạn cũng kết thúc với một sự pha trộn khó hiểu của ưu tiên. Tôi chỉ nhận thấy khi googling vấn đề ưu tiên rằng đây là một dupe thực sự. [Giải thích thêm trong câu trả lời ở đây] (http://stackoverflow.com/a/4065993/73226) –

2

Bạn quên sử dụng cú pháp INNER JOIN cho examinationresultsexamination .Try này:

SELECT examinationresults.id AS id, examinationresults.examid AS examid, 
examination.tag AS examtag, examination.title AS examtitle, examinationresults.revision AS revision, 
examination.medicalspecialtyid AS medicalspecialtyid, medicalspecialties.title AS medicalspecialtytitle, 
examination.institutionid AS institutionid, institutions.title AS institutiontitle, 
examinationresults.grade AS grade, examinationresults.points AS points, examinationresults.pointsof AS pointsof, 
examinationresults.datebegan AS datebegan, examinationresults.datefinished AS datefinished, 
examinationresults.totaltime AS totaltime, examinationresults.finished AS finished, examinationresults.graded AS graded, 
users.username AS username, users.firstname AS firstname, users.middlename AS middlename, users.lastname AS lastname 

FROM examinationresults 
     INNER JOIN examination 
     ON examination.examid = examinationresults.examid 
      AND examination.revision = examinationresults.revision 
     INNER JOIN medicalspecialties 
     ON examination.medicalspecialtyid = medicalspecialties.id 
     INNER JOIN institutions 
     ON examination.institutionid = institutions.id 
     INNER JOIN users 
     ON examinationresults.userid = users.id 
WHERE examinationresults.userid = '1' 

Trên một mặt lưu ý:

Bạn có thể kiểm tra

Bad habits to kick : using old-style JOINs

bởi Aaron Bertrand để tham khảo.

Các vấn đề liên quan