2012-08-05 13 views
0

방과 후 활동 계획 데이터베이스에서 일정, 활동, 자녀 및 학부모의 4 개 테이블에서 데이터를 추출해야합니다.네 개의 테이블 결합하기 - MySQL

일정에는 기본 키, 활동에 대한 참조 및 하위 참조가 포함되어 있습니다.

먼저 선택한 활동 (예 : '축구'검색 및 해당 ID 받기)에 대한 활동 표에서 ID를 가져와야합니다. 그런 다음이 활동을 수행하는 각 하위에 대해 일정 테이블에서 검색하고 이러한 세부 정보를 표시해야합니다. Children 테이블의 각 항목은 Parent에 대한 참조를 보유합니다. 마침내이 참조를 추출해야만 아이의 부모 이름을 표시 할 수 있습니다.

최종 결과는 다음과 같아야합니다

activity_id | child_name | parent_name 

모든 조언이 크게 감사합니다! :)

이 참고로, 여기 내 테이블 스키마입니다 :

<!--CREATE CHILD TABLE--> 

CREATE TABLE Child (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    forename VARCHAR(30) NOT NULL, 
    surname VARCHAR(30) NOT NULL, 
    gender ENUM('male', 'female') NOT NULL, 
    dob DATE NOT NULL, 
    guardian INT NOT NULL, 
) 


<!--CREATE GUARDIAN TABLE--> 

CREATE TABLE Guardian (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    title VARCHAR(5) NOT NULL, 
    forename VARCHAR(30) NOT NULL, 
    surname VARCHAR(30) NOT NULL, 
    address1 VARCHAR(30) NOT NULL, 
    address2 VARCHAR(30), 
    town VARCHAR(30) NOT NULL, 
    county VARCHAR(30), 
    postcode VARCHAR(10) NOT NULL, 
    telephone VARCHAR(20) NOT NULL 
) 


<!--CREATE ACTIVITY TABLE--> 

CREATE TABLE Activity (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    name VARCHAR(30) NOT NULL, 
    day ENUM('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') NOT NULL 
) 


<!--CREATE SCHEDULE TABLE--> 

CREATE TABLE Schedule (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    child_id INT NOT NULL, 
    activity_id INT NOT NULL, 
    date DATE NOT NULL 
) 
+1

대부분의 사람들은 당신이 지금까지 가지고있는 코드를 표시하지 않는 한 당신을 돕기 위해 자원 봉사를하지 않습니다. 그것이 커뮤니티가 작동하는 방식입니다. 당신이 알아 내려고 노력했음을 증명해야합니다. – luther07

+1

단어 설명이 아닌 SQL 정의 테이블 스키마가 도움이되는 것은 무엇입니까? 이것이 당신의 숙제라면, 그냥 그렇게 말하십시오. – favoretti

+0

위의 내용이 업데이트되었습니다. 예, 숙제이고 어디서부터 시작해야할지 모르겠습니다. 두 테이블을 참조하는 데 아무런 문제가 없습니다 (단지 Child 및 Guardian 인 경우 문제가 없음). 그러나 한 테이블에서 ID를 추출하여 다른 테이블을 검색하는 방법을 모릅니다. – Ben

답변

1
SELECT Activity.id, Child.forename, Child.surname, Guardian.forename, Guardian.surname 
    FROM Activity 
    INNER JOIN Schedule ON Schedule.activity_id = Activity.id 
    INNER JOIN Child ON Schedule.child_id = Child.id 
    INNER JOIN Guardian ON Child.guardian_id = Guardian.id 
    WHERE Activity.name = 'football' 
+0

감사합니다 닐 - 많이 감사합니다! – Ben

관련 문제