2017-12-12 3 views
2

* *이 해결이 테이블에 가입하세요.SQL 쿼리 - 아이디, 이름, 첫 해, 두 번째 해에 예술가 (아티스트) 호출 - 나는 두 테이블</p> <p><strong>표 1</strong>이

ID NAME             year1  year2 COUNTRY 

41 Filipe Nobrega           2001  2051 Portugal    
    42 Bernardo Morais           2010  2060 Portugal    
    43 Fernando Evora           2013  2070 Portugal    
    44 Florenzo Giovanni          2003  2047 Italia    
    45 Tiago Alves            1980  1990 Portugal    
    46 Rui Gonzales            1975  1995 Espanha    
    47 Jose Almeida            1800  1876 Portugal    
    48 Jhon Snow            1900  1940 Winterfell   
    49 test              2001  2020 Espanha 

표 2 - 예술 작품의 ID 및 아티스트의 ID와 autoria (저자)라고 또한 그 기술의 유형이 (그림, 음악, 조각 ...)

ART ARTIST TYPE_OF_ART  

121   41 Pintura  
    122   41 Musica  
    123   42 Pintura  
    124   42 Cinema  
    125   42 Literatura 
    126   43 Teatro  
    127   43 Literatura 
    128   43 Danca   
    129   43 Arte_digital 
    130   43 Pintura  
    131   44 Pintura  
    132   44 Cinema  
    133   44 Pintura  
    134   45 Cinema  
    135   45 Literatura 
    136   46 Cinema  
    137   46 Literatura 
    138   46 Literatura 
    139   47 Arte_digital 
    140   47 Pintura  
    141   47 Teatro  
    142   48 Cinema  

문제는 다음과 같습니다. 2 가지 미만의 예술 작품을 만든 모든 아티스트를 만나보세요.

결과가 같아야

필리페 NOBREGA - 41

티아 ALVES 기술의 2 개 보유 - 45 그 기술의 2 개를 갖고

JOHN SNOW - 48 그는 1 개의 예술 작품을 보유하고 있습니다.

SELECT DISTINCT A.name, A.id FROM artista A, autoria AUT WHERE AUT.artist = A.id GROUP BY(A.name, A.id) HAVING (COUNT(*) <= 2);

을 그리고 TEST를 제외하고 위의 모든 반환 -및 TEST 49 그는이 내가있어 무엇 0

있습니다.

희망 하시겠습니까?

+0

MySQL 또는 Oracle을 사용하고 있습니까? 관련되지 않은 제품에 태그를 지정하지 마십시오. – jarlh

+0

태그 제대로! MySQL <> Oracle <> SQL Server. 하나는 당신을 사용합니까 ??? – Eric

+0

죄송합니다, 오라클, SQL 개발자 –

답변

1

이 쿼리는 INNER JOIN을 수행합니다. 일 수도 있고 이 아니기 때문에에는 Artista에 가입하는 레코드가 포함되어 있기 때문에 OUTER JOIN이 필요합니다. 그리고 참여하는 레코드가 포함되어 있지 않은 경우 INNER JOIN에는 결과 집합의 레코드가 포함되지 않습니다. 쿼리를 변경하여 OUTER JOIN :

SELECT DISTINCT A.name, A.id 
    FROM artista A LEFT OUTER JOIN autoria AUT ON AUT.artist = A.id 
GROUP BY(A.name, A.id) 
HAVING (COUNT(*) <= 2); 
+0

을 사용하여 고맙습니다. 완전히 작동합니다. 문제는 내가 아는 것만 사용할 수 있다는 것입니다. 그래서 LEFT OUTER JOIN은 나를 위해 아니오입니다. 내 선생님은 2 개의 SELECT가 없다고 말하면서 더 힘들게 만들었습니다. 다른 해결책은 GROUP BY를 사용하는 것만 찾으면 도움이 될 것입니다. –

+0

외부 조인에 대한 조사를 통해 현재 자신이 "알았 음"이라고 말할 수 있습니까? 또한, 이렇게 : 'DISTINCT A.name을 선택하십시오 .A authors A, autoria AUT WHERE AUT.artist = A.id'는 암시적인 내부 조인을 생성합니다.그래서 어느 쪽이든, 당신은 조인을 사용하고 있습니다. –

+0

나는 선생님과 이야기를 나눴다. Thx 도움! –