我有两张桌子
表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 以外,它还会返回以上所有内容。
答案 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);