SQL查询 - 加入两个表

时间:2017-12-12 21:05:14

标签: sql oracle

我有两张桌子

表1 - 名为Artista(艺术家)的ID,姓名,第一年,第二年。

    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件。

结果应为:

FILIPE NOBREGA - 41 他有两件艺术品

TIAGO ALVES - 45 他有2件艺术品

JOHN SNOW - 48 他有1件艺术品

TEST - 49 他有0

这就是我所拥有的:

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 以外,它还会返回以上所有内容。

1 个答案:

答案 0 :(得分:1)

此查询执行INNER JOIN。您需要OUTER JOIN,因为autoria可能包含任何加入Artista的记录。如果它不包含加入的记录,则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);
相关问题