2013-11-05 13 views
5

Tôi muốn chọn kết quả trong sqlite từ nhiều bảng có nhiều khóa ngoài, tôi đã thử JOIN nhưng nó không hoạt động tốt; ví dụ:Làm thế nào để chọn kết quả sqlite từ nhiều bảng với nhiều phím ngoài

một bảng cho STUDENT:

CREATE TABLE STUDENT (
STUDENT_NAME TEXT  NOT NULL, 
STUDENT_NUMBER INTEGER PRIMARY KEY NOT NULL, 
STUDENT_ADDRESS TEXT  NOT NULL 
); 

và một bảng cho EXAMS:

CREATE TABLE EXAMS(
EXAM_CODE  INTEGER PRIMARY KEY NOT NULL, 
EXAM_SUBJECT TEXT  NOT NULL, 
EXAM_LOCATION TEXT  NOT NULL 
); 

và một bảng gọi là WROTE_EXAM để có được những thông tin cho các sinh viên đã viết một bài thi cụ thể

CREATE TABLE WROTE_EXAM (
STUDENT_NUMBER INTEGER  NOT NULL, 
EXAM_CODE  INTEGER  NOT NULL, 
DATE   DATE  NOT NULL, 
FOREIGN KEY(STUDENT_NUMBER) REFERENCES STUDENT(STUDENT_NUMBER), 
FOREIGN KEY(EXAM_CODE) REFERENCES EXAMS(EXAM_CODE)); 

đây là dữ liệu mẫu i nserted vào bảng:

STUDENT_NAME : John 
STUDENT_NUMBER: 123456789 
STUDENT_ADDRESS : 10th street 
EXAM_CODE: 123 
EXAM_SUBJECT: One Subject 
EXAM_LOCATION: Class 

bây giờ, tôi muốn:
a) tên sinh viên đầu ra, mã thi và vị trí sinh viên, người viết bài thi
b) Mã thi đầu ra, môn thi và vị trí thi cho sinh viên có ID: 123456789

cảm ơn

+0

Bạn đã cố gắng những gì JOIN? –

+0

@muistooshort Tôi đã làm 'CHỌN DISTINCT STUDENT_NAME, EXAM_CODE, STUDENT_LOCATION TỪ WROTE_EXAM, HỌC SINH THAM GIA THAM GIA, HỌC SINH' không chắc chắn cách tham gia 3 bảng với nhau và nhận thông tin này –

Trả lời

10

Khi tham gia bảng, bạn hầu như luôn muốn bao gồm điều kiện tham gia rõ ràng. Các SQLite syntax diagrams có thể hữu ích:

Join Op Join Constraint

Vì vậy, các SQL từ nhận xét của bạn nên trông như thế này:

select student.student_name, exams.exam_code, ... 
from student 
join wrote_exam using (student_number) 
join exams using (exam_code) 
where ... 

hoặc bạn có thể sử dụng THAM GIA ... ON:

select student.student_name, exams.exam_code, ... 
from student 
join wrote_exam on student.student_number = wrote_exam.student_number 
join exams on exams.exam_code = wrote_exam.exam_code 
where ... 

Sau đó, thêm where điều kiện để lọc kết quả nếu cần. Lưu ý rằng tôi cũng đã thêm một số bộ định mức bảng vào các cột trong mệnh đề SELECT của bạn, những điều cần thiết để xác định duy nhất exam_code mà bạn quan tâm và vì một cột cần phải đủ điều kiện, tôi đã làm tất cả để thống nhất ; trong cuộc sống thực tôi muốn tiền tố tất cả để làm cho mọi thứ đẹp và rõ ràng.

Ngoài ra, tôi không thấy số student_location ở bất kỳ đâu, có thể bạn có nghĩa là student.student_address hoặc exams.exam_location.

+0

cảm ơn bạn đã giúp đỡ –

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