0

테이블을 쿼리하려고하는데 쿼리를 찾는 데 어려움을 겪고 있습니다.many to many 테이블 쿼리하기

Member 
ID | NAME 
1 | Frans 
2 | Eric 
3 | Stephan 
4 | Kris 

Evenement 
ID | NAME 
1 | Picknic 
2 | Party 
3 | Movie 

Evenement 
ID_EVENEMENT | ID_MEMBER 
1    | Kris 
1    | Stephan 
1    | Eric 
2    | Eric 
2    | Frans 
3    | Frans 
3    | Stephan 

좋아, 내가하고 싶은 쿼리는 이것이다 : :

이 (간체) 내 테이블은

내가 원하는 별도

select 
    member_evenement.ID_MEMBER and member_evenement.ID_EVENEMENT 
from 
    member_evenement 
where 
    member.ID on member_evenement.ID_MEMBER 
where 
    member_evenement.ID_MEMBER does not exist 
     for each member_evenement.ID_EVENEMENT 

에.

나는 SQL 서버 2008 R2가

내가 내 질문에 충분히 설명 희망을 사용하고 있습니다.

이러한

Member 
ID | NAME 
1 | Frans 
2 | Eric 
3 | Stephan 
4 | Kris 

Evenement 
ID | NAME 
1 | Picknic 
2 | Party 
3 | Movie 

Member_Evenement 
ID_EVENEMENT | ID_MEMBER 
1    | Kris 
1    | Stephan 
1    | Eric 
2    | Eric 
2    | Frans 
3    | Frans 
3    | Stephan 

다음 내 쿼리의 결과는 다음과 같이해야 내 기본 테이블 인 경우 :

Evenement 
ID_EVENEMENT | ID_MEMBER | MEMBER_NAME | EVENEMENT_NAME 
1    | 1   | Frans   | Picknic 
2    | 3   | Stephan  | Party 
2    | 4   | Kris   | Party 
3    | 2   | Eric   | Movie 
3    | 4   | Kris   | Movie 
+3

시도한 SQL을 게시 할 수 있습니까? 이것은 당신이 조인을 시작하는 데 도움이 될 수 있습니다 : http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html 그리고 나는 당신이 원하는 것을 이해하는데 어려움을 겪고 있습니다. .. Member_evenement에 존재하지 않는 멤버의 모든 레코드를 원하십니까? 그렇다면 Member_evenement의 ID_Member가 null 인 member_evenement에 대한 member에서 left join 만 필요합니다. – xQbert

+1

Evenement 테이블에는 구성원의 ID 인 1, 2,3 대신 STRING 데이터가있는 ID_Member라는 필드가 있습니까? 좋아, 네가 겪은 일은 사건의 일부가 아닌 모든 회원들이라고 생각해. Frans는 member_evenement 1에 없었으므로 Frans가 나타납니다. 하지만 Member_Evenement.ID_Member의 데이터가 잘못되었습니다 (희망) – xQbert

+0

그래, 그냥 새로 고침 : p – NomenNescio

답변

1
SELECT e.ID AS ID_EVENEMENT, m.ID AS ID_MEMBER, 
    FROM Evenement e, Member m 
EXCEPT 
SELECT ID_EVENEMENT, ID_MEMBER 
    FROM member_evenement; 
+0

감사합니다. <3 :-) – NomenNescio

+1

본 적이 있습니다! EXCEPT는 관계형 모델의 MINUS/difference 연산자와 유사합니다! 멤버와 이벤트의 이름을 표시하려면 결과를 from 문에 전달하고 그에 대한 조인을 수행해야합니다. – NomenNescio

1

가 member_evenement에 기록되지 않은 멤버와 evenement의 모든 조합을 반환하려면 테이블을 만들려면 다음을 시도하십시오.

select e.id id_evenement, 
     m.id id_member, 
     m.name member_name, 
     e.name evenement_name 
from member m 
cross join evenement e 
left join member_evenement me 
on e.id = me.id_evenement and m.id = me.id_member 
where me.id_evenement is null or me.id_member is null 

(여기서는 id_membe r은 실제로 회원의 ID 및 샘플 데이터로하지 자신의 이름)

+0

여기에서 마크가 가져 가도록하겠습니다. 누군가 당신을 낚는다면 물고기를 가르쳐 주려는 나에게 아무런 의미가 없습니다. – xQbert

1

마크 베니 스터의와 동일한 실행 계획을주는 또 다른 가능성, 그리고 onedaywhen의 대답은 다음과 같습니다.

SELECT member.id AS memberid, evenement.id AS evenementid 
FROM member 
CROSS JOIN evenement WHERE 
    NOT EXISTS(
    SELECT NULL AS [Empty] 
    FROM member_evenement 
    WHERE member_evenement.memberid = member.id 
    AND member_evenement.evenementid = evenement.id 
)