2013-03-11 3 views
0

이 질문을 다루는 Stackoverflow에 관한 많은 질문을 연구했지만 해결책을 찾지 못했습니다.조인을 사용하여 MySQL의 세 테이블에서 쿼리를 실행하는 방법은 무엇입니까?

STUDENT 
studentID lastName firstName 
08422567 Brown  Susan 
10356844 Black  Roger 
10659475 White  Steven 
09463729 Grey  Naomi 


MODULE 
moduleID moduleName 
CE1181  Biometrics 
CE1183  Intelligent Systems 
CE1133  Databases 
CE1186  HCI 

GRADES 
studentID* moduleID* grade 
10356844 CE1181  A 
10356844 CE1183  B 
10356844 CE1133  C 
10356844 CE1186  A 
08422567 CE1181  B 
08422567 CE1183  B 
08422567 CE1133  B 
08422567 CE1186  B 
10659475 CE1181  C 
10659475 CE1183  C 
10659475 CE1133  A 
10659475 CE1186  C 
09463729 CE1181  A 
09463729 CE1183  B 
09463729 CE1133  B 
09463729 CE1186  B 

내가 실행해야 쿼리는 다음과 같습니다 : 여기

내 테이블입니다 내가 함께 테이블을 조인 할 필요가 있다는 것을 알고

Select all from students whose id begins with 10 and their grade for intelligent systems was a B 

지금, 나는 그래서 내 테이블을 구축 성적 테이블에는 학생 및 모듈 테이블에 연결하는 외래 키가 포함됩니다. 초보자로서

는, 이러한 유형의 쿼리를 얻을하는 것은 매우 어렵다 내 하드의 주위에, 내가,이 내가 무엇을 가지고 내가 대답에 가까운입니다 희망 :

SELECT * FROM student WHERE studentID LIKE '10%' INNER JOIN grades 
ON student.studentID=grades.studentID INNER JOIN module 
ON grades.moduleID =module.moduleID 

물론이 작동하지 않습니다, 하지만 나는 올바른 길을 따라 가고 있는가? 이 질문에 대한 올바른 해결책은 나중에 사용하기 위해 코드 도구 상자에 보관하는 것이 좋습니다!

+1

은 후 ** ** 당신의'JOIN's을'WHERE' 절을 배치 시도? –

+0

나는 긍정적이다 나는 이것을 시도한 많은 시간 중 어느 시점에서 그것을 시도했다, 나는 나의 질문을 여기에 게시하기 전에 모든 조합을 시도했다고 생각했다. – deucalion0

+1

이와 같은 정보를 찾는 좋은 곳은 MySQL 문서입니다. 처음에는 읽기가 약간 어려울 수 있지만 학습에 도움이되도록 익숙해 져야합니다. 예를 들어, 'SELECT'문 구문에 대한 링크를 확인하십시오. http://dev.mysql.com/doc/refman/5.0/en/select.html – BellevueBob

답변

3

거의 없지만 WHEREJOIN 절 이후로 갈 필요가 있습니다. 나는 단순히 구문에 별칭을 사용했습니다.

SELECT s.* 
FROM grades g 
     JOIN module m 
     ON m.moduleid = g.moduleid 
     JOIN student s 
     ON s.studentid = g.studentid 
WHERE g.studentid LIKE '10%' 
     AND g.grade = 'B' 
     AND m.modulename = 'Intelligent Systems' 

결과

| STUDENTID | LASTNAME | FIRSTNAME | 
------------------------------------ 
| 10356844 | Black |  Roger |

See the demo

+0

천재! 감사합니다! :) 그것은 완벽하게 작동합니다! 나는 그것을 나의 시도와 비교하는 방법을 분석 할 필요가있다, 그것이 어떻게 작동하는지 이해하고 싶다. 이 점에 대해 대단히 감사합니다. – deucalion0

+0

나는이 답변을 순수한 해결책으로 받아 들였고 페이지에서 볼 수있는 첫 번째 해결책이었습니다. 고맙습니다!! – deucalion0

1

WHERE 절은 FROM 절 뒤에 따라야합니다.

SELECT a.*, b.*, c.* -- deselect the columns you don't want to show 
FROM student a 
     INNER JOIN grades b 
      ON a.studentID = b.studentID 
     INNER JOIN module c 
      ON b.moduleID = c.moduleID 
WHERE a.studentID LIKE '10%' AND 
     b.grade = 'B' AND 
     c.modulename = 'Intelligent Systems' 

조인에 대해 더 친절하게 아래 링크를 방문, 더 많은 지식을 얻으려면 :

결과를

╔═══════════╦══════════╦═══════════╦══════════╦═══════╦═════════════════════╗ 
║ STUDENTID ║ LASTNAME ║ FIRSTNAME ║ MODULEID ║ GRADE ║  MODULENAME  ║ 
╠═══════════╬══════════╬═══════════╬══════════╬═══════╬═════════════════════╣ 
║ 10356844 ║ Black ║ Roger  ║ CE1183 ║ B  ║ Intelligent Systems ║ 
╚═══════════╩══════════╩═══════════╩══════════╩═══════╩═════════════════════╝ 
+0

답변을 주셔서 감사합니다, 그것은 다른 답변과 동일하게 보입니다. 나는 당신의 것을 시도했으며 너무 효과적입니다! 나는 당신의 도움에 감사하고, 그 연결은 중대하다, 특히 조인의 시각적 인 대표, 나는 지금 그 (것)들을 읽는 것을 멀리이다!:) – deucalion0

+0

당신은 환영합니다': D' –

+0

죄송합니다 다른 하나 전에 대답을 보지 못했습니다 난 단지 한 대답을 선택할 수 있습니다 :( – deucalion0

관련 문제