让我们有这个查询
select music,fav from MUSIC music
left join Favorite_Music fav on fav.id_music = music.id_music
where fav.id_user= 22 or fav.id_user is NULL
我的表
Music
: id_music | ....
1 |
... |
100 |
我的表
Favorite_Music
:id_fav | id_music | id_user
1 | 15 | 22
2 | 20 | 22
3 | 40 | 30
我想检索所有
MUSIC
,对于某些东西,我想标记我user 22
的喜爱音乐。但是当我执行
music
40
上面的查询时,不包括在内!所以我想获取所有
music
并获取Favorite_Music
的空值,这不是我的22个用户的值。 最佳答案
您必须将过滤器应用于join子句中的外部联接表,而不是where子句。像这样:
select music,fav
from MUSIC music
left join Favorite_Music fav on fav.id_music = music.id_music
and (fav.id_user= 22 or fav.id_user is NULL )
当您在where子句中进行过滤(这似乎很显然)时,外部联接将成为隐式内部联接。