2013-10-21 2 views
0

에서 COUNT 함수를 기반으로 테이블에서 레코드를 선택해야합니다나는 네 개의 테이블이 SQL

PAINTING   GALLERY    ARTIST    PAINTED 
- PAINTING_TITLE - GALLERY_ID  - ARTIST_ID   - PAINTED_CODE 
- PAINTING_ID  - GALLERY_NAME  - ARTIST_LAST  - ARTIST_ID 
             - ARTIST_FIRST  - PAINTING_ID 

그려진 표는 각 아티스트가 그린 그림을 추적합니다. 일부 그림은 둘 이상의 예술가가 그린 그림입니다. 두 명의 작가가 그린 그림 목록을 반환하고 싶습니다.

SELECT PAINTING.PAINTING_TITLE AS TITLE, 
    GALLERY.GALLERY_NAME AS GALLERY, 
    ARTIST.ARTIST_FIRST AS ARTISTFIRST, 
    ARTIST.ARTIST_LAST AS ARTISTLAST 
FROM PAINTING, GALLERY, PAINTED, ARTIST 
WHERE PAINTING.GALLERY_ID = GALLERY.GALLERY_ID 
AND PAINTING.PAINTING_ID = PAINTED.PAINTING_ID 
AND ARTIST.ARTIST_ID = PAINTED.ARTIST_ID 
AND (SELECT COUNT(*) FROM PAINTED, PAINTING, ARTIST 
WHERE PAINTING.GALLERY_ID = GALLERY.GALLERY_ID 
AND PAINTING.PAINTING_ID = PAINTED.PAINTING_ID 
AND ARTIST.ARTIST_ID = PAINTED.ARTIST_ID) = 2; 

이것은 필요한 결과를 반환하지 않습니다. 두 명의 예술가가있는 그림 만 선택하는 방법에 대한 아이디어가 있습니까?

Access SQL을 사용하고 있는데, 어떤 도움을 주시면 감사하겠습니다.

답변

0

사용하는 대신 내부 SELECTGROUP BY :

SELECT 
    PAINTING.PAINTING_TITLE AS TITLE, 
    GALLERY.GALLERY_NAME AS GALLERY 
FROM 
    PAINTING, 
    GALLERY, 
    PAINTED 
WHERE 
     PAINTING.GALLERY_ID = GALLERY.GALLERY_ID 
    AND 
     PAINTING.PAINTING_ID = PAINTED.PAINTING_ID 
GROUP BY 
    PAINTING.PAINTING_TITLE, 
    GALLERY.GALLERY_NAME 
HAVING 
    COUNT(PAINTED.ARTIST_ID) = 2 
+0

내가 ... 액세스 SQL 전문가가 아니에요하지만 조건이'having' 절로 이동하지 않겠습니까? – canon

+0

@ 반드시 확인해야합니다. 멋지게 발견되었습니다. – MarcinJuraszek

+0

좋은 해결책이지만 그림 옆에 작가의 이름이 나열되어 있지 않습니다. 이 부분이 어떻게 작동하는지 알 수 있습니까? – LaneWalker