2012-08-17 3 views
0

나는 다음과 같은 스키마가 각 사진은 많은 갤러리에 속할 수SQL 쿼리 대다 관계

Photo [id, name] 

Gallery [id, name] 

PhotoGallery [photo_id, gallery_id] 

합니다. 일부 갤러리에 속하지 않는 모든 별개의 사진 (ID로 그룹화)을 표시 할 수있는 SQL (MySQL) 쿼리를 작성해야합니다.

나는 갤러리 '토끼'에 속하지 않는 모든 사진을 선택합니다
Photo 
------ 
1 bunny 
2 rabbit 
3 eagle 

Gallery 
----- 
1 bunnies 
2 rabbits 
3 birds 

PhotoGallery 
----- 
1 1 
1 2 
2 2 
3 3 

: 예를 들어 우리는 다음과 같은 데이터를 가지고있다.

결과는 같아야합니다

이 토끼

어떤 제안이? 데이터베이스에 약 10,000,000 장의 사진이 있기 때문에 쿼리도 빨라야합니다. 갤러리에는 300,000 장의 사진이 포함될 수 있습니다.

+0

당신은 당신을 위해 작동하지 않는 SQL 문 (들) 지금까지 해봤를 보여 주시겠습니까? 스택 오버 플로우에 대한 [How to Ask] (http://stackoverflow.com/questions/how-to-ask) 페이지, 특히 "숙제하기"섹션을 참조하십시오. – jadarnel27

답변

2
SELECT * 
FROM photos 
WHERE photoID NOT IN (select photoid from photogalleries where galleryid=1) 
+0

이 쿼리는 10,000,000 개의 사진이있는 데이터베이스에서 잘 수행됩니까? – ehpc

+0

나는 그것을 의심한다. 갤러리에 9,999,900 개의 사진이있는 경우가 아니면 엄청난 결과를 얻을 것입니다. – podiluska

+0

다음은 성능과 관련된 기사입니다. - http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ –

0
SELECT 
     p.* 
FROM 
     photos p LEFT OUTER JOIN PhotoGallery pg on p.id = pg.photoid 
WHERE 
     pg.photoid IS NULL AND pg.galleryid = 1