이 문제에 대해 다음 3 가지 테이블을 고려하십시오.n : m 관계로 3 개의 테이블 조인, 일치하지 않는 행보기
Event
id (pk)
title
Event_Category
event_id (pk, fk)
category_id (pk, fk)
Category
id (pk)
description
꽤 평범한 것 같아요. :) 각 이벤트는 0 개 이상의 범주로 나눌 수 있으며 총 4 개의 범주가 있습니다. 내 응용 프로그램에서 특정 이벤트의 범주를보고 편집하려고합니다. 그래픽으로 이벤트는 모든 카테고리와 함께 표시되며 이벤트가 카테고리에 속하는지 여부를 나타내는 체크 박스가 표시됩니다. 선택 사항을 변경하고 저장하면 중간 테이블 Event_Category가 수정됩니다. 하지만 먼저 : 특정 이벤트에 대해 이것을 선택하는 방법은 무엇입니까? 필자가 필요로하는 질의는 실제로 항상 4 개의 행을 반환 할 것이다.
다음은 id = 11 인 이벤트가 속하는 범주의 항목 만 리턴합니다. 외부 조인을 사용한 실험은 결과에 더 많은 행을주지 않았습니다.
SELECT e.id, c.omschrijving
FROM Event e
INNER JOIN Event_Categorie ec ON e.id = ec.event_id
INNER JOIN Categorie c ON c.id = ec.categorie_id
WHERE e.id = 11
또는 쿼리의 범주 테이블부터 시작해야합니까? 희망 힌트 :) TIA, 클라스
업데이트 : 그래,하지만 여전히 대답을 찾지 못했습니다. 그러나이 테이블은 이벤트 설명을 보는 데만 사용되므로 쿼리에서 이벤트 테이블을 생략하여이 문제를 단순화했습니다.
SELECT * from Categorie c LEFT JOIN Event_Categorie ec ON c.id = ec.categorie_id WHERE ec.event_id = 11;
단순화 된 2 테이블 쿼리는 조회 테이블과 링크 테이블 만 사용하지만 Categorie 테이블에서 총 4 개의 행 대신 2 개의 행만 반환합니다. 내 생각 엔 WHERE 절이 결합 후에 적용되므로 링크 테이블에 조인되지 않은 행은 제외됩니다. 내 응용 프로그램에서 하위 쿼리를 사용하여 문제를 해결했지만 여전히 최상의 솔루션이 무엇인지 알고 싶습니다.
이런 종류의 질문은 이전에 여러 번 묻고 대답했습니다. StackOverflow를 게시하기 전에 검색해 보셨습니까? –
예. 그래도 대답을 찾지 못했습니다. 그러나 나는이 문제를 단순화했다. – klausch
원래 질문 아래에있는 업데이트를 참조하십시오 – klausch