programing

SQL의 다대다 가입

magicmemo 2023. 7. 30. 17:34
반응형

SQL의 다대다 가입

미니멀리즘적인 제목에 대해서는 미안하지만 어떻게 짧게 설명해야 할지 모르겠습니다.세 개의 테이블이 있습니다.

그룹 테이블

ID | Genre
-----------------
1  | Action
2  | Adventure
3  | Drama

다대다 테이블

GroupID | ElementID
-----------------
    3   |    1
    1   |    2
    2   |    2
    2   |    3
    3   |    3

그리고 요소들의 표는

ID | Element
-----------------
1  | Pride and Prejudice
2  | Alice in Wonderland
3  | Curious Incident Of A Dog In The Night Time

모든 것이 괜찮고 매우 간단합니다.제가 달성하고자 하는 SELECT는 다음과 같습니다.

ID | Element                                         |  Genre
-------------------------------------------------------------
1  | Pride and Prejudice                             | Drama
2  | Alice in Wonderland                             | NULL
3  | Curious Incident Of A Dog In The Night Time     | Drama

Elements 테이블에서 모든 요소를 선택하고 장르 필드를 Drama 또는 null로 설정합니다.

MySQL에서 이 작업을 수행하려고 합니다.

잘 부탁드립니다.

이 작은 속임수(다대다 테이블의 외부 조인, 그룹의 제약 조건 포함)로 가능합니다.ID는 3이어야 합니다(드라마의 경우).

http://sqlfiddle.com/ #!9/01cf3/1

SELECT elements.ID, elements.Element, groups.Genre
  FROM elements
LEFT OUTER JOIN group_elements
  ON elements.ID = group_elements.ElementID
 AND group_elements.GroupID = 3
LEFT OUTER JOIN groups
  ON group_elements.GroupID = groups.ID

LEFT OUTER JOINmeans : 앞에 나온 테이블의 모든 라인을 가져갑니다(테이블의 왼쪽에 있는 라인).LEFT OUTER JOIN다음 표에 해당하는 행이 없더라도 (원하는 경우).그 조건은ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3만약 우리가 우리의 요소와 일치하는 것을 발견한다면,ID, 드라마(그룹)여야 합니다.ID = 3).그런 다음 그룹 테이블에서 다른 LEFT OUTER JOIN을 수행하여 장르 열을 표시하거나 요소가 드라마가 아닌 경우 NULL을 표시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17774373/sql-join-many-to-many

반응형