[mysql] MySQL을 사용하여 세 테이블 조인

이름이 세 개의 테이블이 있습니다.

**Student Table**
-------------
id    name
-------------
1     ali
2     ahmed
3     john
4     king

**Course Table**
-------------
id    name
-------------
1     physic
2     maths
3     computer
4     chemistry

**Bridge**
-------------
sid    cid
-------------
1     1
1     2
1     3
1     4
2     1
2     2
3     3
3     4
4     1
4     2

이제 그가 공부했던 과목 이름으로 학생 이름을 보여주기 위해,

**Result**
---------------------------
Student        Course
---------------------------
ahmed         physic
ahmed         maths
ahmed         computer
ahmed         chemistry
ali           physic
ali           maths
john          computer
john          chemistry
king          physic
king          maths

다음 쿼리를 작성합니다.

select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name

그러나 필요한 결과를 반환하지 않습니다 …

그리고 다른 사람보다 누가 관리자인지 찾고 싶다면 정규화 된 형식은 무엇입니까?

**employee**
-------------------
id        name
-------------------
1         ali
2         king
3         mak
4         sam
5         jon

**manage**
--------------
mid      eid
--------------
1         2
1         3
3         4
4         5

그리고이 결과를 얻고 싶습니다.

**result**
--------------------
Manager      Staff
--------------------
ali          king
ali          mak
mak          sam
sam          jon



답변

간단히 사용 :

select s.name "Student", c.name "Course"
from student s, bridge b, course c
where b.sid = s.sid and b.cid = c.cid 


답변

ANSI 구문을 사용하면 테이블을 조인하는 방법이 훨씬 더 명확 해집니다.

SELECT s.name as Student, c.name as Course 
FROM student s
    INNER JOIN bridge b ON s.id = b.sid
    INNER JOIN course c ON b.cid  = c.id 
ORDER BY s.name 


답변

정규화 양식

select e1.name as 'Manager', e2.name as 'Staff'
from employee e1 
left join manage m on m.mid = e1.id
left join employee e2 on m.eid = e2.id


답변

SELECT *
FROM user u
JOIN user_clockits uc ON u.user_id=uc.user_id
JOIN clockits cl ON cl.clockits_id=uc.clockits_id
WHERE user_id = 158


답변

SELECT 
employees.id, 
CONCAT(employees.f_name," ",employees.l_name) AS   'Full Name', genders.gender_name AS 'Sex', 
depts.dept_name AS 'Team Name', 
pay_grades.pay_grade_name AS 'Band', 
designations.designation_name AS 'Role' 
FROM employees 
LEFT JOIN genders ON employees.gender_id = genders.id 
LEFT JOIN depts ON employees.dept_id = depts.id 
LEFT JOIN pay_grades ON employees.pay_grade_id = pay_grades.id 
LEFT JOIN designations ON employees.designation_id = designations.id 
ORDER BY employees.id;

위의 예와 같이 여러 테이블을 조인 할 수 있습니다.


답변

두 개 이상의 테이블을 조인하기위한 쿼리 :

SELECT ops.field_id, ops.option_id, ops.label
FROM engine4_user_fields_maps AS map 
JOIN engine4_user_fields_meta AS meta ON map.`child_id` = meta.field_id
JOIN engine4_user_fields_options AS ops ON map.child_id = ops.field_id 
WHERE map.option_id =39 AND meta.type LIKE 'outcomeresult' LIMIT 0 , 30


답변

이것을 사용하십시오 :

SELECT s.name AS Student, c.name AS Course
FROM student s
  LEFT JOIN (bridge b CROSS JOIN course c)
    ON (s.id = b.sid AND b.cid = c.id);