我想从具有多个外键的多个表中选择 sqlite 结果,我尝试了 JOIN
但效果不佳;例如:
STUDENT
的表格:
CREATE TABLE STUDENT (
STUDENT_NAME TEXT NOT NULL,
STUDENT_NUMBER INTEGER PRIMARY KEY NOT NULL,
STUDENT_ADDRESS TEXT NOT NULL
);
EXAMS
表格:
CREATE TABLE EXAMS(
EXAM_CODE INTEGER PRIMARY KEY NOT NULL,
EXAM_SUBJECT TEXT NOT NULL,
EXAM_LOCATION TEXT NOT NULL
);
还有一个名为 WROTE_EXAM
的表,用于获取参加特定考试的学生的信息
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));
这是插入表中的示例数据:
STUDENT_NAME : John
STUDENT_NUMBER: 123456789
STUDENT_ADDRESS : 10th street
EXAM_CODE: 123
EXAM_SUBJECT: One Subject
EXAM_LOCATION: Class
现在,我想:
a) 输出学生姓名,考试代码和学生位置,谁写了考试
b) 为ID为123456789的学生输出考试代码、考试科目和考试地点
谢谢
最佳答案
在连接表时,您几乎总是希望包含显式连接条件。 SQLite syntax diagrams可能有帮助:
因此您评论中的 SQL 应该看起来更像这样:
select student.student_name, exams.exam_code, ...
from student
join wrote_exam using (student_number)
join exams using (exam_code)
where ...
或者你可以使用 JOIN...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 ...
然后添加where
条件,根据需要过滤结果。
请注意,我还在您的 SELECT 子句中的列中添加了一些表限定符,这些是唯一指定您感兴趣的 exam_code
所必需的,并且由于需要限定一列,为了保持一致性,我全部都做了;在现实生活中,我会给它们都加上前缀,以使事情变得美好和明确。
此外,我在任何地方都没有看到 student_location
,也许您是指 student.student_address
或 exams.exam_location
。
关于sql - 如何从具有多个外键的多个表中选择sqlite结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781624/