5

複数の外部キーを持つ複数のテーブルから 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の学生の試験コード、試験科目、試験場所を出力する

ありがとう

4

1 に答える 1

11

テーブルを結合するときは、ほとんどの場合、明示的な結合条件を含めたいと思うでしょう。SQLite構文図が役立つ場合があります。

参加する 結合制約

したがって、コメントの 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関心のあるものを一意に指定するために必要であり、1 つの列を修飾する必要があるため、一貫性のためにすべてを行いました。実生活では、物事をわかりやすく明確にするために、すべてにプレフィックスを付けます。

また、student_locationどこにも a が表示されません。おそらくstudent.student_addressまたはを意味しますexams.exam_location

于 2013-11-05T04:39:50.993 に答える